angular2是什麼?我猜不容我贅述,各位必定略有耳聞,不管是曾經AngularJS的擁躉,亦或是React的粉絲,都或多或少的對她有過一點了解。未見其物、先聞其聲,angular2在問世以前已經作足了宣傳,想必諸位也必定被下面各類詞彙所震懾,什麼:TypeScript、 ES5、 ES6、 Dart、 Immutable、 Unidirectional Data Flow、 Reactive Programming、 Decorators、 System.js、 webpack...,天花亂墜,美不勝收!但咱們不由要問,「都說AngularJS學習曲線陡峭,也沒陡出這些個莫名詞彙!」,angular2究竟該如何上手?看了這些個知識點,有木有嚇得手抖,都搞不清從何處入手了!?javascript
本教程主旨:多些操做、少點說教(理論是進階必須的,千萬不要誤讀),讓咱們從實踐中追尋真理吧!html
本章源碼:environmentjava
本章使用angular2
版本爲:2.4.5
, webpack
版本爲: 2.2.0
node
這裏我推薦使用vscode(原諒我變了,以前推薦的是atom
)。很爽的哦!react
mkdir environment cd environment npm init
根據npm init
提問,建立package.json
文件,建立後去掉沒必要要的字段,像這樣便可:webpack
{ "name": "environment", "version": "1.0.0", "description": "I will show you how to set up angular2 development environment", "keywords": [ "angular2", "environment" ], "scripts": { "start": "webpack-dev-server --hot--host 0.0.0.0" }, "author": "Howard.Zuo", "license": "MIT", "dependencies": { "@angular/common": "^2.4.5", "@angular/compiler": "^2.4.5", "@angular/core": "^2.4.5", "@angular/platform-browser": "^2.4.5", "@angular/platform-browser-dynamic": "^2.4.5", "@angular/forms": "^2.4.5", "core-js": "^2.4.1", "rxjs": "5.0.3", "zone.js": "^0.7.6" }, "devDependencies": { "@types/core-js": "^0.9.35", "ts-loader": "^2.0.0", "typescript": "^2.1.5", "webpack": "^2.2.0", "webpack-dev-server": "^2.2.0" } }
npm install
@angular: 這個必須的,沒意見吧?之因此分了多個包,這是最新2.1.2
的變化,能夠按需引入,增長靈活性git
core-js: javascript
的一個標準庫實現,包含了大量ES2015
, ES2016
的ES5
實現angularjs
rxjs: 一個Reactive Programming
的JavaScript
實現。這裏對她的依賴是由於angular2
支持多種數據更新模式,好比:flux、Rx.jses6
zone.js: 用來對異步任務提供Hooks
支持,使得在異步任務運行以前/以後作額外操做成爲可能。在angular2
裏的主要應用場景是提升髒檢查效率、下降性能損耗。github
webpack: 咱們這裏使用webpack2
對源碼進行編譯、打包,而不是用官網介紹的System.js
的運行時加載、解釋、執行。合併打包的好處不用我多說吧?減小請求數、uglify
、預檢查...
webpack-dev-server: 一個輕量級的,支持webpack
編譯的靜態服務器(調試工具),本章節咱們就用它啓動程序
ts-loader: TypeStrong
出品的TypeScript
加載器,經過該加載器,TypeScript
源碼能夠順利被編譯成ES5
代碼
typescript: angular2
官方推薦的開發語言,咱們在教程裏也將使用該語言進行代碼編寫
@types/core-js: 自typescript
2.0.0
之後,使用@types
管理聲明文件,因爲angular2
依賴ES2015
的諸多特性,譬如:Promise
、Map
等,因此須要引入這些API的聲明
index.html
touch index.html
向剛纔建立的index.html
裏添加以下內容:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>environment</title> </head> <body> <!--這裏引用咱們的第一個component--> <my-app></my-app> <!--加載使用webpack編譯後的bundle--> <script type="text/javascript" src="/dist/bundle.js"></script> </body> </html>
app.ts
mkdir ts touch ts/app.ts
向剛纔建立的ts/app.ts
裏添加以下內容:
import {Component} from '@angular/core'; //聲明第一個Component @Component({ selector: 'my-app', template: '<h1>My First Angular 2 App</h1>' }) export class AppComponent { }
index.ts
touch ts/index.ts
向剛纔建立的ts/index.ts
裏添加以下內容:
//不顯示引入,你會獲得"Uncaught reflect-metadata shim is required when using class decorators"的錯誤 import 'core-js/es6'; import 'core-js/es7/reflect'; import 'zone.js/dist/zone'; //引入NgModule裝飾器 import { NgModule } from '@angular/core'; //引入瀏覽器模塊 import { BrowserModule } from '@angular/platform-browser'; //引入啓動器 import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; //引入咱們剛纔建立的第一個component import { AppComponent } from './app'; //聲明一個應用模塊 @NgModule({ imports: [ BrowserModule ], declarations: [ AppComponent ], bootstrap: [ AppComponent ] }) class AppModule { } //啓動應用 platformBrowserDynamic().bootstrapModule(AppModule);
webpack.config.js
touch webpack.config.js
向剛纔建立的webpack.config.js
裏添加以下內容:
const {resolve} = require('path'); module.exports = { entry: { index: './ts/index.ts' }, output: { path: resolve(__dirname, 'dist'), filename: 'bundle.js', publicPath: 'dist/' }, module: { exprContextCritical: false, rules: [ { test: /\.ts$/, use: ['ts-loader'] } ] }, resolve: { extensions: [ '.js', '.ts' ] } };
tsconfig.json
touch tsconfig.json
向剛纔建立的tsconfig.json
裏添加以下內容:
{ "compilerOptions": { "module": "commonjs", "target": "es5", "moduleResolution": "node", "noImplicitAny": true, "removeComments": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "sourceMap": true, "declaration": false }, "buildOnSave": false, "compileOnSave": false, "exclude": [ "node_modules" ] }
好了,到目前爲止,咱們第一個示例的開發/運行環境就基本搭好了,如今啓動試試看:
npm start
你會看到:
下回預告:牛刀小試component