Angular CLI 6 新增了一個指令 ng add <library>
,我們可以透過這個指令來安裝各式各樣的 schematics 套件,進而擴充 Angular CLI 的功能。如果想要寫一個自己的 schematics 又可以透過 ng add
來安裝。這一篇文章的內容或許是一個開始
Angular CLI
schematics
可以視為一個指令產生範本的任務集合,所以 Angular CLI 也是透過指令的方式去執行某一個 schematics 裡面的某一個動作。所以在開始寫之前,須了解 Angular CLI 的 ng add 到底做了哪些動作
預設 CLI 所使用的命令清單中,有一個 add.ts
,這個命令就是這次的主角,他的執行步驟有
-
檢查 ng add 後面使否有輸入引述,需要提供要安裝的套件名稱
-
npm install 套件
-
解析是否有相關設定引數是要給 schematics 命令使用的
-
建立執行命令設定
1
2
3
4
5
6
7
8
9const runOptions = {
schematicOptions: options,
workingDir: this.project.root,
collectionName, // 集合名稱
schematicName: 'ng-add', // 執行命令
allowPrivate: true,
dryRun: false, // 實際產生檔案
force: false,
}; -
執行 schematics 命令
自訂 Schematics
根據上面的執行命令,可以得知 CLI 的 ng add 是會執行 ng-add
的指令,所以只要在自己的 schematics collection 內新增 ng-add 就可以了,但在哪之前,先建立一個全新空的 schematics 吧
-
如果沒有安裝 schematics CLI 的,可以透過這指令安裝
1
npm install -g @angular-devkit/schematics
-
安裝完成後,可以執行
schematics --help
看看有沒有安裝成功 -
建立空的 schematics
1
schematics blank <yourSchematicsName>
-
進入剛剛建立好的資料夾內,eg
/postDemo
-
打開熟悉的編輯器,並修改以下內容
-
collection.json
,將原本的指令興改成ng-add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19{
"$schema": "../node_modules/@angular-devkit/schematics/collection-schema.json",
"schematics": {
"post-demo": {
"description": "A blank schematic.",
"factory": "./post-demo/index#postDemo"
}
}
}
// 修改成
{
"$schema": "../node_modules/@angular-devkit/schematics/collection-schema.json",
"schematics": {
"ng-add": {
"description": "A blank schematic.",
"factory": "./ng-add/index#ngAdd"
}
}
}- factory 後面內容的
#ngAdd
是指要執行的 function
- factory 後面內容的
-
將原本的
post-demo
資料夾名稱修改成ng-add
-
將
ng-add/index.ts
檔案裡的 function 名稱修改成ngAdd
到這裡已經完成 CLI 執行 ng-add 的基本型,再來就是可以把想要在
ng add
時要做的工作寫在這邊就可以了 -
加碼補充
Angular CLI 的另外一個指令 ng update
,做法類似,詳細的設計可以參考 Angular Material 2 的 schematics update,source code