在Angular CLI的V6版本中,首次出現了Workspace的概念,經過angular-cli構建anngular項目的再也不是一個單純的application。隨着angular-cli.json被angular。json取代,angular開始支持多項目的workspace,除了主項目目錄下的app外,用戶可根據本身的須要去豐富本身的workspace,每一個project均可以根據須要進行配置,例如用戶可建立內部的component-library,以及可單獨運行的sub-project等。node
此文基於 Angular CLI version 6.0.7 進行項目的搭建。 首先,初始化workspace:git
ng new reina-workspace
複製代碼
項目初始化完成後,找到根目錄下的angular.json文件,其中最外層是對整個workspace的配置信息,另外包含一個projects對象,其主要結構以下:github
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"reina-workspace": {
......
},
"reina-workspace-e2e": {
......
}
},
"defaultProject": "reina-workspace"
}
複製代碼
在projects目錄下,默認會生成兩個project,一個對應defaultProject,另外一個是對應的e2e測試項目,可根據須要對每一個project進行配置,其主要有如下參數:npm
"reina-workspace": {
"root": "",
"sourceRoot": "src",
"projectType": "application",
"prefix": "app",
"schematics": {},
"architect": {
"build": { ...... },
"serve": { ...... },
"extract-i18n": { ...... },
"test": { ...... },
"lint": { ...... }
}
},
複製代碼
項目初始化完成後,在package.json文件中,會默認生成以下的script對象,可經過ng serve啓動默認項目,一樣能夠運行ng serve/ng build等命令,其都會對應到上述project的architect配置中。json
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
複製代碼
瞭解完項目的基本結構以後,嘗試建立projects目錄下的第一個application,控制檯中運行如下命令:bash
ng generate application first-app
複製代碼
執行完成後,在projects目錄下成功生成了兩個project,分別爲‘first-app’和‘first-app-e2e’,此時查看angular.json文件,發如今projects中自動添加了兩個project:app
"projects": {
"reina-workspace": { ...... },
"reina-workspace-e2e": { ...... },
"first-app": { ...... },
"first-app-e2e": { ...... }
}
複製代碼
能夠經過ng serve first-app來啓動該項目,也可經過ng build first-app命令對項目進行build,固然,也能夠在package.json的script中添加相應的配置,如添加如下代碼,經過npm run start-first-app命令啓動first-app.ide
"start-first-app": "ng serve first-app"
複製代碼
一樣,咱們能夠經過ng generate library命令,構建內部的library,在控制檯中運行如下命令:測試
ng generate library first-library
複製代碼
執行完成後,在projects目錄下又生成了一個名爲first-library的project,library不會生成測試文件,此時查看angular.json文件,發如今projects中自動添加了一個project:ui
"projects": {
"reina-workspace": { ...... },
"reina-workspace-e2e": { ...... },
"first-app": { ...... },
"first-app-e2e": { ...... },
"first-library": { ...... }
}
複製代碼
一樣,咱們能夠經過ng build first-library命令進行build, build完成後,則能夠將其引入到application中使用。在first-app/src/app/app.module.ts中引入FirstLibraryModule(import { FirstLibraryModule } from 'first-·library'),經過這種方式,就能夠first-app項目中正常使用first-library庫了。 注意,library需先通過build後使用,能夠經過在package.json中配置npm的&操做符配置多命令的快捷啓動方式。如:
"launch":'ng build first-library && ng serve first-app'
複製代碼
github: github.com/sunrun93/re…