angular.json檔案的講解(程式碼範例)
這篇文章帶給大家的內容是關於angular.json文件的講解(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
在Angular CLI 6 的版本後,原先的angular-cli.json就被換成了angular.json,而其中裡面的字段變化挺大了,如果不了解基本的組成,或者直接把舊版的程式碼copy 到新版的工作空間中,會導致一些很不友善的錯誤。
這種變化主要還是因為Angular CLI引入了monorepo (一個空間管理多個專案) 的開發模式,即使用ng new出來的相當於一個大的工作空間,透過angular.json配置來管理各種ng generate application | library出來的項目或元件庫。
其實這種模式優勢還是很明顯的,例如一個公司有多種管理平台或產品時,使用這種方式可以統一各個專案的環境,各個專案間共用的元件也被統一維護起來,所有項目共用npm包以及typescript配置。
monorepo下結構如:
#但是其實大多數人還是一個工作空間維護一個項目,所以這個在這裡不那麼重要,只是想說json檔案的改變是為了新的模式而已。
Angular.json的部分欄位
當你ng new一個工作空間時,預設會在根目錄建立一個專案以及對應e2e專案。初始的angular.json結構如下(省略的部分的配置代碼)
{ "$schema": "./node_modules/@angular/cli/lib/config/schema.json", "version": 1, "newProjectRoot": "projects", "projects": { "xxxx": { "root": "", "sourceRoot": "src", "projectType": "application", "prefix": "app", "schematics": {}, "architect": {} } }, "defaultProject": "xxxx" }
這是部分的配置屬性,我按照順序簡單做個記錄,以後也好查閱。
$schema
指向一個 JSON Schema 文件,這個文件描述了angular.json所有的欄位以及限制。
其實可以比喻為一個有「類型提示」功能文件,只要支援了這個功能的 IDE 或編輯器,在書寫angular.json文件時便會給出對應的提示。
version
設定版本
#newProjectRoot
新專案所在的路徑。
當使用ng generate application | library建立一個新的專案時,會自動組裝到設定的newProjectRoot目錄下
projects
放置所有項目的配置。其中一個項目為子項,如xxxx為一個項目,在建立時自動產生。
{ "projects": { "xxxx": { "root": "", "sourceRoot": "src", "projectType": "application", "prefix": "app", "schematics": {}, "architect": {} } } }
在一個單獨的配置中,可以透過靈活的配置實現一些自動化操作還有使用CLI內建的一些指令。
root
代表專案的“根目錄”,也就是專案所在的位置,或專案原始碼的父級目錄。專案的根目錄包含了一些特定的配置。
sourceRoot
專案原始碼所在的目錄,通常預設使用src目錄。
projectType
##標示這個專案是application還是libraryprefix##使用ng generate component | directive產生元件或指令時預設的selector前綴,通常我們使用指令建立的元件或指令都是app-xxx格式,我們可以手動在這裡改動,使整個專案生效。
schematicsCLI中產生元件、指令、模組等檔案的指令是使用@angular-devkit/schematics實現的,這些指令通常會帶有一些快捷配置,例如一個產生元件的指令:ng g c --spec=false --styleext=scss,這條指令可以直接產生一個不帶測試檔案、使用scss為樣式檔案的元件。如果每次都要手動輸入這些配置就會顯得麻煩,所以angular.json提供了schematics屬性來統一設定一些生成類別的命令配置。
這裡的schematics是針對單一project來的。整個angular.json也有此字段,預設生效於所有project。
CLI預設了幾組選項,我們可以針對不同的選項進行設定:
@schematics/angular:component
@schematics/angular:class
#@schematics/angular:directive
@schematics/angular:guard
@schematics/angular:module
@schematics/angular:pipe
#@schematics/angular:service
拿component舉例,如果要實現統一ng g c --spec=false --styleext=scss的效果,可以設定如下:
{ "schematics": { "@schematics/angular:component": { "styleext": "less", "spec": false } } }
#接就可以直接使用ng g c直接產生對應的組件了。
architect包含幾組CLI相關的專案自動化指令配置,例如本機執行、編譯、測試等等。預設預設了幾組指令配置如build、serve等等:
{ "architect":{ "build":{}, "serve":{}, "extract-i18n":{}, "test":{}, "lint":{} } }
每個組態項目都有3 個欄位屬性:builder,options ,configurations,例如預設的build指令設定:
{ "architect": { "build": { "builder": "@angular-devkit/build-angular:browser", "options": { "outputPath": "dist/testApp", "index": "src/index.html", "main": "src/main.ts", "polyfills": "src/polyfills.ts", "tsConfig": "src/tsconfig.app.json", "assets": [ "src/favicon.ico", "src/assets" ], "styles": [ "src/styles.css" ], "scripts": [] }, "configurations": { "production": { "fileReplacements": [ { "replace": "src/environments/environment.ts", "with": "src/environments/environment.prod.ts" } ], "optimization": true, "outputHashing": "all", "sourceMap": false, "extractCss": true, "namedChunks": false, "aot": true, "extractLicenses": true, "vendorChunk": false, "buildOptimizer": true } } } } }
這個是專案預設產生的設定。
builder代表要执行的内置程序,因为CLI内置了一些自动化工具,architect只是提供了一个facade模式(通俗地讲,就是开发者不需要知道内部的复杂实现)给开发者配置使用,本质上还是调用的内置工具。
options代表针对当前builder要配置的配置项,调用不同的内置程序,是需要传对应的配置项的,由于配置项很多,这里也不会列出。
configurations代表这个命令的多种调用模式,在此配置里,我们可以定义不同的别名,然后使用不同的配置(配置的字段还是属于options里的),最后在使用命令时便可以手动选择不同的模式。
如何使用
CLI其实内置了几个快捷命令来对应默认生成的配置如ng serve、ng build等等,如果是我们额外自定义的配置,则可以使用ng run
命令来实现,其中project和architect为必填,configurations为选填。
比如我们简单额外自定义一个本地运行的服务器命令:
{ "architect":{ "myServe":{ "builder": "@angular-devkit/build-angular:dev-server", "options": { "browserTarget": "xxxx:build", "port": 8800 }, "configurations": { "port1": { "port": 8801 }, "port2": { "port": 880 } } } } }
配置使用了内置的运行本地服务器程序,然后使用默认的build配置,加上自定义的运行端口,另外加上两个不同模式,运行不同端口。
使用ng run xxxx:myServe可以正常运行本地服务器跑项目,端口是8800
使用ng run xxxx:myServe:port1端口是8801
当然,我们还可以直接使用额外的命令行配置直接覆盖已经定义的配置:
ng run xxxx:myServe:port1 --port=8808
这里的例子只是为了简单了解下architect的用法。
defaultProject
默认项目,当使用一些CLI命令没有指定项目名称时,默认指向的项目。
schema.json
其实我只是为了记录自己有点印象的属性,整个angular.json还有很多其他的字段,如果想要全面了解,我们可以直接打开$schema所指向的文件,里面详细地展示了各种字段的类型、配置以及描述说明。
以上是angular.json檔案的講解(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP與Vue:完美搭檔的前端開發利器在當今網路快速發展的時代,前端開發變得愈發重要。隨著使用者對網站和應用的體驗要求越來越高,前端開發人員需要使用更有效率和靈活的工具來創建響應式和互動式的介面。 PHP和Vue.js作為前端開發領域的兩個重要技術,搭配起來可以稱得上是完美的利器。本文將探討PHP和Vue的結合,以及詳細的程式碼範例,幫助讀者更好地理解和應用這兩

Django是一個由Python編寫的web應用框架,它強調快速開發和乾淨方法。儘管Django是web框架,但要回答Django是前端還是後端這個問題,需要深入理解前後端的概念。前端是指使用者直接和互動的介面,後端是指伺服器端的程序,他們透過HTTP協定進行資料的互動。在前端和後端分離的情況下,前後端程式可以獨立開發,分別實現業務邏輯和互動效果,資料的交

身為C#開發者,我們的開發工作通常包括前端和後端的開發,而隨著技術的發展和專案的複雜性提高,前端與後端協同開發也變得越來越重要和複雜。本文將分享一些前端與後端協同開發的技巧,以幫助C#開發者更有效率地完成開發工作。確定好介面規範前後端的協同開發離不開API介面的交互。要確保前後端協同開發順利進行,最重要的是定義好介面規格。接口規範涉及到接口的命

實作即時通訊的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。詳細介紹:1、WebSocket,它可以在客戶端和伺服器之間建立持久連接,實現即時的雙向通信,前端可以使用WebSocket API來創建WebSocket連接,並透過發送和接收訊息來實現即時通訊;2、Long Polling,是一種模擬即時通訊的技術等等

在前端開發面試中,常見問題涵蓋廣泛,包括HTML/CSS基礎、JavaScript基礎、框架和函式庫、專案經驗、演算法和資料結構、效能最佳化、跨域請求、前端工程化、設計模式以及新技術和趨勢。面試官的問題旨在評估候選人的技術技能、專案經驗以及對行業趨勢的理解。因此,應試者應充分準備這些方面,以展現自己的能力和專業知識。

Go語言作為一種快速、高效的程式語言,在後端開發領域廣受歡迎。然而,很少有人將Go語言與前端開發聯繫起來。事實上,使用Go語言進行前端開發不僅可以提高效率,還能為開發者帶來全新的視野。本文將探討使用Go語言進行前端開發的可能性,並提供具體的程式碼範例,幫助讀者更了解這一領域。在傳統的前端開發中,通常會使用JavaScript、HTML和CSS來建立使用者介面

Django:前端和後端開發都能搞定的神奇框架! Django是一個高效、可擴展的網路應用程式框架。它能夠支援多種Web開發模式,包括MVC和MTV,可以輕鬆地開發出高品質的Web應用程式。 Django不僅支援後端開發,還能夠快速建構出前端的介面,透過模板語言,實現靈活的視圖展示。 Django把前端開發和後端開發融合成了一種無縫的整合,讓開發人員不必專門學習

Golang與前端技術結合:探討Golang如何在前端領域發揮作用,需要具體程式碼範例隨著互聯網和行動應用的快速發展,前端技術也愈發重要。而在這個領域中,Golang作為一門強大的後端程式語言,也可以發揮重要作用。本文將探討Golang如何與前端技術結合,以及透過具體的程式碼範例來展示其在前端領域的潛力。 Golang在前端領域的角色作為一門高效、簡潔且易於學習的
