閱讀 Angular 6/RxJS 最新教程,請訪問 前端修仙之路
Angular CLI 是一個命令行接口(Command Line Interface),用於實現自動化開發工做流程。它容許你作如下這些事情:css
LiveReload
支持的開發服務器,以便在開發過程當中預覽應用程序在詳細介紹 Angular CLI 以前,咱們先來看一下如何安裝 Angular CLI。html
在使用 Angular CLI 以前,你必須確保系統中 Node.js 的版本高於 6.9.0
且 npm 的版本高於 3.0.0
。前端
若你還沒有安裝 Node.js,你能夠訪問 Node.js 官網,而後根據你所用的操做系統選擇對應的安裝方式。node
若你本機已經安裝 Node.js 和 npm,你能夠經過運行如下命令,確認一下當前環境信息:webpack
$ node - v # 顯示當前Node.js的版本 $ npm -v # 顯示當前npm的版本
當你本機 Node.js 環境確認無誤後,你能夠在命令行使用 npm 安裝 TypeScript:git
$ npm install -g typescript # 安裝最新的TypeScript穩定版
若要安裝 Angular CLI,只需在命令行中運行如下命令:github
$ npm install -g @angular/cli
驗證是否成功安裝 Angular CLI,可在命令行運行:web
$ ng version
在我本機運行上述命令,則輸出如下結果:typescript
@angular/cli: 1.1.1 node: 6.10.2 os: darwin x64
安裝完 Angular CLI,接下來咱們來使用它建立新的應用程序。shell
Angular CLI 爲咱們提供了兩種方式,用於建立新的應用程序:
ng init
命令所以 ng new
與 ng init
的功能是類似的,只是 ng new
會爲咱們建立新的目錄。
假設你還未建立新的目錄,那麼咱們須要使用 ng new
命令來建立新的項目:
$ ng new my-app
當運行上面的命令後,將發生如下事情:
my-app
目錄被建立environment
相關的文件並初始化爲默認的設置此時 my-app
目錄中 Angular 應用程序的目錄結構以下:
. ├── README.md ├── e2e │ ├── app.e2e-spec.ts │ ├── app.po.ts │ └── tsconfig.e2e.json ├── karma.conf.js ├── package.json ├── protractor.conf.js ├── src │ ├── app │ │ ├── app.component.css │ │ ├── app.component.html │ │ ├── app.component.spec.ts │ │ ├── app.component.ts │ │ └── app.module.ts │ ├── assets │ ├── environments │ │ ├── environment.prod.ts │ │ └── environment.ts │ ├── favicon.ico │ ├── index.html │ ├── main.ts │ ├── polyfills.ts │ ├── styles.css │ ├── test.ts │ ├── tsconfig.app.json │ ├── tsconfig.spec.json │ └── typings.d.ts ├── tsconfig.json └── tslint.json
--dry-run
: boolean, 默認爲 false
, 若設置 dry-run
則不會建立任何文件--verbose
: boolean, 默認爲 false
--link-cli
: boolean, 默認爲 false
, 自動連接到 @angular/cli
包--skip-install
: boolean, 默認爲 false
, 表示跳過 npm install
--skip-git
: boolean, 默認爲 false
, 表示該目錄不初始化爲 git 倉庫--skip-tests
: boolean, 默認爲 false
, 表示不建立 tests 相關文件--skip-commit
: boolean, 默認爲 false
, 表示不進行初始提交--directory
: string, 用於設置建立的目錄名,默認與應用程序的同名--source-dir
: string, 默認爲 'src'
, 用於設置源文件目錄的名稱--style
: string, 默認爲 'css'
, 用於設置選用的樣式語法 ('css'
, 'less'
or 'scss'
)--prefix
: string, 默認爲 'app'
, 用於設置建立新組件時,組件選擇器使用的前綴--mobile
: boolean, 默認爲 false
,表示是否生成 Progressive Web App 應用程序--routing
: boolean, 默認爲 false
, 表示新增帶有路由信息的模塊,並添加到根模塊中--inline-style
: boolean, 默認爲 false
, 表示當建立新的應用程序時,使用內聯樣式--inline-template
: boolean, 默認爲 false
, 表示當建立新的應用程序時,使用內聯模板除此以外,你能夠在本機上運行 ng generate --help
查看更多的可用選項。接下來讓咱們來看一下如何運行應用程序。
首先進入使用 Angular CLI 建立的應用程序目錄,例如:
$ cd my-app
而後運行:
$ ng serve
當運行上面的命令後,將發生如下事情:
.angular-cli.json
文件中加載配置信息localhost:4200
若要中止應用程序,你可使用 ctrl+c
快捷鍵。
你可使用 ng generate
命令,爲已有的 Angular 應用程序添加新的功能。
ng generate class my-new-class
: 新建 classng generate component my-new-component
: 新建組件ng generate directive my-new-directive
: 新建指令ng generate enum my-new-enum
: 新建枚舉ng generate module my-new-module
: 新建模塊ng generate pipe my-new-pipe
: 新建管道ng generate service my-new-service
: 新建服務ng generate
命令與其它的子命令同樣,也有快捷鍵,具體以下:
ng g cl my-new-class
: 新建 classng g c my-new-component
: 新建組件ng g d my-new-directive
: 新建指令ng g e my-new-enum
: 新建枚舉ng g m my-new-module
: 新建模塊ng g p my-new-pipe
: 新建管道ng g s my-new-service
: 新建服務爲了添加類名爲 UserProfile
類,咱們能夠運行:
$ ng generate class user-profile
Angular CLI 會自動調整文件名和類名的字母大小寫,所以如下命令具備相同的效果:
$ ng generate class user-profile $ ng generate class userProfile $ ng generate class UserProfile
運行上述命令後,在幕後將發生如下事情:
src/app
目錄下將建立一個 user-profile.ts
文件,該文件導出一個名爲 UserProfile
的類--spec
: boolean, 默認爲 false
, 表示是否生成單元測試相關的 spec
文件# Generate class 'UserProfile' $ ng generate class user-profile # Generate class 'UserProfile' with unit test $ ng generate class user-profile --spec
若想建立一個選擇器爲 app-site-header
的組件,則能夠運行:
$ ng generate component site-header installing component create src/app/site-header/site-header.component.css create src/app/site-header/site-header.component.html create src/app/site-header/site-header.component.spec.ts create src/app/site-header/site-header.component.ts update src/app/app.module.ts
Angular CLI 將自動調整文件名和組件名稱的字母大小寫,並將前綴應用於組件選擇器,所以如下命令具備相同的效果:
$ ng generate component site-header $ ng generate component siteHeader $ ng generate component SiteHeader
運行上述命令後,在幕後將發生如下事情:
src/app/site-header
目錄被建立site-header
目錄下會生成如下四個文件:
SiteHeaderComponent
組件類和組件的元信息SiteHeaderComponent
組件會被自動地添加到最近模塊 @NgModule
裝飾器的 declarations
屬性中。--flat
: boolean, 默認爲 false
, 表示在 src/app
目錄下生成組件而不是在 src/app/site-header
目錄中--inline-template
: boolean, 默認爲 false
, 表示使用內聯模板而不是使用獨立的模板文件--inline-style
: boolean, 默認爲 false
, 表示使用內聯樣式而不是使用獨立的樣式文件--prefix
: boolean, 默認爲 true
, 使用 .angular-cli.json
配置的前綴做爲組件選擇器的前綴--spec
: boolean, 默認爲 true
, 表示生成包含單元測試的 spec 文件--view-encapsulation
: string, 用於設置組件的視圖封裝策略--change-detection
: string, 用於設置組件的變化檢測策略# Generate component 'site-header' $ ng generate component site-header # Generate component 'site-header' with inline template and inline styles $ ng generate component site-header --inline-template --inline-style
若想建立一個選擇器爲 appAdminLink
的指令,則能夠運行:
$ ng generate directive admin-link installing directive create src/app/admin-link.directive.spec.ts create src/app/admin-link.directive.ts update src/app/app.module.ts
Angular CLI 將自動調整文件名和指令名稱的字母大小寫,並將前綴應用於指令選擇器,所以如下命令具備相同的效果:
$ ng generate directive admin-link $ ng generate directive adminLink $ ng generate directive AdminLink
運行上述命令後,在幕後將發生如下事情:
src/app/admin-link.directive.ts
文件被建立,該文件導出一個名爲 AdminLinkDirective
且選擇器爲 appAdminLink
的指令src/app/admin-link.directive.spec.ts
文件被建立,該文件包含指令相關的單元測試信息AdminLinkDirective
指令會被自動地添加到最近模塊 @NgModule
裝飾器的 declarations
屬性中。--flat
: boolean, 默認爲 true
, 表示在 src/app
目錄中生成指令而不是在 src/app/admin-link
目錄下--prefix
: boolean, 默認爲 true
, 使用 .angular-cli.json
配置的前綴做爲指令選擇器的前綴--spec
: boolean, 默認爲 true
, 表示生成包含單元測試的 spec 文件# Generate directive 'adminLink' $ ng generate directive admin-link # Generate directive 'adminLink' without unit test $ ng generate directive admin-link --spec=false
若想建立一個名爲 Direction
的枚舉類 ,則能夠運行:
$ ng generate enum direction installing enum create src/app/direction.enum.ts
Angular CLI 會自動調整文件名和枚舉名稱的字母大小寫,所以如下命令具備相同的效果:
$ ng generate enum direction $ ng generate enum Direction
運行上述命令後,在幕後將發生如下事情:
src/app.direction.enum.ts
文件被建立,該文件導出名爲 Direction
的枚舉若想建立一個新的模塊 ,則能夠運行:
$ ng generate module admin installing module create src/app/admin/admin.module.ts
運行上述命令後,在幕後將發生如下事情:
src/app/admin
目錄被建立src/app/admin/admin.module.ts
文件中,AdminModule
模塊被建立須要注意的是,新增的模塊不會被自動添加到 src/app/app.module.ts
文件中的 AppModule
模塊中,用戶能夠根據具體需求導入對應的模塊。
若要在其它模塊中導入剛纔新增的模塊,能夠在 @NgModule
的 imports
屬性中設定該新增的模塊。具體示例以下:
import { AdminModule } from './admin/admin.module'; @NgModule({ // ... imports: [ AdminModule ] }) export class AppModule { }
--routing
: boolean, 默認爲 false
, 表示生成一個額外包含路由信息的 AdminRoutingModule
模塊,且該模塊會被自動地導入到新建的模塊中--spec
: boolean, 默認爲 false
, 表示添加 src/app/admin/admin.module.spec.ts
單元測試文件# Add module 'admin' $ ng generate module admin # Add module 'admin' with additional module containing routing information $ ng generate module admin --routing
若想建立一個名爲 convertToEuro
的管道 ,則能夠運行:
$ ng generate pipe convert-to-euro installing pipe create src/app/convert-to-euro.pipe.spec.ts create src/app/convert-to-euro.pipe.ts update src/app/app.module.ts
Angular CLI 會自動調整文件名和管道名稱的字母大小寫,所以如下命令具備相同的效果:
$ ng generate pipe convert-to-euro $ ng generate pipe convertToEuro $ ng generate pipe ConvertToEuro
運行上述命令後,在幕後將發生如下事情:
src/app/convert-to-euro.pipe.ts
文件被建立,該文件導出一個名爲 ConvertToEuroPipe
的管道類src/app/convert-to-euro.pipe.spec.ts
文件被建立,該文件包含管道相關的單元測試信息CovertToEuroPipe
管道會被自動地添加到最近模塊 @NgModule
裝飾器的 declarations
屬性中。--flat
: boolean, 默認爲 true
, 表示在 src/app
目錄中生成管道而不是在 src/app/convert-to-euro
目錄下--spec
: boolean, 默認爲 true
, 表示生成包含單元測試的 spec 文件# Generate pipe 'convertToEuro' with spec and in /src/app directory $ ng generate pipe convert-to-euro # Generate pipe 'convertToEuro' without spec and in /src/app/convert-to-euro directory $ ng generate pipe convert-to-euro --spec=false --flat=false
若想建立一個名爲 BackendApiService
的服務 ,則能夠運行:
$ ng generate service backend-api installing service create src/app/backend-api.service.spec.ts create src/app/backend-api.service.ts WARNING Service is generated but not provided, it must be provided to be used
Angular CLI 會自動調整文件名和服務名稱的字母大小寫,所以如下命令具備相同的效果:
$ ng generate service backend-api $ ng generate service backendApi $ ng generate service BackendApi
運行上述命令後,在幕後將發生如下事情:
src/app/backend-api.service
文件被建立,該文件導出一個名爲 BackendApiService
的服務類src/app/back-api.service.spec.ts
文件被建立,該文件包含管道相關的單元測試信息須要注意的是,Angular CLI 會提醒用戶服務已成功建立,但還沒有配置該服務。用戶能夠根據具體需求在模塊或組件的 providers
屬性中配置該新建的服務。具體示例以下:
import { BackendApiService } from './backend-api.service'; @NgModule({ // ... providers: [BackendApiService], bootstrap: [AppComponent] })
--flat
: boolean, 默認爲 true
, 表示在 src/app
目錄中生成服務而不是在 src/app/backend-api
目錄下--spec
: boolean, 默認爲 true
, 表示生成包含單元測試的 spec 文件# Generate service with DI token 'BackendApiService' in /src/app directory $ ng generate service backend-api # Generate service with DI token 'BackendApiService' in /src/app/backend-api directory $ ng generate service backend-api --flat=false
Angular CLI 在新建項目的時候,自動爲咱們集成了 Karma test runner 測試框架。當添加新的功能時,咱們能夠利用 --spec
選項,告訴 Angular CLI 讓它爲咱們生成功能相關的 .spec.ts
測試單元測試文件。
spec
文件在 src
目錄中相應功能的同一目錄下建立,這使得咱們能夠在使用功能時輕鬆找到它們。
若要運行單元測試,則能夠運行:
$ ng test
此時在你的控制檯將輸出如下信息:
$ ng test [karma]: No captured browser, open http://localhost:9876/ [karma]: Karma v1.4.1 server started at http://0.0.0.0:9876/ [launcher]: Launching browser Chrome with unlimited concurrency [launcher]: Starting browser Chrome
運行上述命令後,在幕後將發生如下事情:
.angular-cli.json
文件中加載配置信息.angular-cli.json
文件中的 Karma
相關的配置信息,運行 Karma
。Karma 的配置文件默認在根目錄下,文件名爲 karma.conf.js
。Chrome
。src/test.ts
。默認狀況下,採用的是 Jasmine
框架。建立應用程序時,會自動建立 src/test.ts
文件。它預先配置爲加載和配置測試Angular 應用程序所需的代碼,並運行 src
目錄中以 .spec.ts
結尾的全部文件。src
目錄下的文件的變化,而後自動運行單元測試。若要運行 e2e 測試,則能夠運行:
$ ng e2e
若要構建應用程序,則能夠運行:
$ ng build
運行上述命令後,在幕後將發生如下事情:
.angular-cli.json
文件中加載配置信息Webpack
打包項目相關的 JavaScript 與 CSS 文件outDir
所指定的目錄,默認是輸出到 dist
目錄--aot
: 開啓 ahead-of-time
編譯--base-href
: string, 設置 index.html
文件中 <base>
元素的連接地址--environment
: string, 設置所使用的環境,默認爲 dev
--output-path
: string, 設置輸出的路徑--target
: string, 設置所使用的環境,默認爲 development
--watch
: boolean, 默認爲 false
, 開啓 watch
模式,監聽文件異動並自動從新構建指定 target
的值,會影響到構建流程的運行方式。它的可選值:
若需使用 production
模式,構建應用程序,則能夠運行:
$ ng build --target=production
Environments
讓你可以自定義應用程序行爲。
你能夠在 .angular-cli.json
文件中定義本身的 environments
文件。默認的是:
environments/environment.ts
export const environment = { production: false };
environments/environment.prod.ts
export const environment = { production: true };
須要注意的是,構建流程默認使用 dev
環境。
若是指定了不一樣的環境,構建過程將使用相應的環境:
# Uses environments/environment.ts $ ng build # Also uses environments/environment.ts $ ng build --environment=dev $ ng build --env=dev # Uses environments/environment.prod.ts $ ng build --environment=prod $ ng build --env=prod
正如你在 src/main.ts
文件中看到的,經過導入 ./environments/environment
文件,咱們就能夠訪問到 environment
相關的配置信息,具體以下:
import { enableProdMode } from '@angular/core'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { AppModule } from './app/app.module'; import { environment } from './environments/environment'; if (environment.production) { enableProdMode(); } platformBrowserDynamic().bootstrapModule(AppModule);
從 v1.0 開始,Angular CLI 提供了一個命令,用於將你的應用程序與 Angular CLI 分離。
默認狀況下,Angular CLI 爲您管理基礎 Webpack 配置,所以您無需處理其複雜性。若是你但願手動配置webpack,而且您再也不須要在Angular應用程序中使用Angular CLI,則能夠運行:
$ ng eject
此時在你的控制檯將輸出如下信息:
========================================================================================== Ejection was successful. To run your builds, you now need to do the following commands: - "npm run build" to build. - "npm run test" to run unit tests. - "npm start" to serve the app using webpack-dev-server. - "npm run e2e" to run protractor. Running the equivalent CLI commands will result in an error. ========================================================================================== Some packages were added. Please run "npm install".
運行上述命令後,在幕後將發生如下事情:
ejected: true
的屬性被添加到 .angular-cli.json
文件中webpack.config.js
文件,所以你能夠在沒有使用 Angular CLI
的環境下構建項目package.json
中的構建腳本會被更新,所以你能夠運行 npm run build
來構建項目package.json
中的測試腳本會被更新,所以你能夠運行 npm run test
來運行單元測試package.json
中的啓動腳本會被更新,所以你能夠運行 npm run start
或 npm start
來啓動開發服務器package.json
中的 e2e
腳本會被更新,所以你能夠運行 npm run e2e
來運行 End-to-End
測試把應用程序與 Angular CLI 分離後,你就能夠根據本身的要求自定義 Webpack
的配置。