Angular2.x與Angular1.x徹底不一樣,Angular2.x是不兼容Angular1.x的,所在在框架的構造上,它們是徹底不一樣的。在Angular2.x中,由於其是基於ES6來開發的,因此會有不少第三方依賴。因爲不少瀏覽器還不支持ES6,因此Angular2引入了不少polyfill或者shim, 致使咱們引入了第三方依賴。javascript
官方的說法,它是基於數據流的構建系統(streaming build system),主要用來讓自動化和加強你的工做流程(Automate and enhance your workflow)。
html
1.安裝 node v6.x.x npm 3.x.x gulp 有興趣的能夠安裝typescriptjava
gulp的安裝 npm install -g 全局安裝環境node
gulp 教程:https://www.w3ctech.com/topic/134
中文網:http://www.gulpjs.com.cn/git
2.新建項目文件夾(英文)es6
3.在github上clone相關文件,並放入相關配置項
地址:https://github.com/Jasonwang911/angular2github
4.package.json文件:用來標記項目所需的npm依賴包typescript
這是一個gulp的工做流,在gulp中咱們部署的函數都是由gulp.task來執行的,這個文件的主要作的工做是 npm
1.對angular2源碼進行轉換,將es6代碼轉換爲es5代碼,而後合併成angular2.js,放入dest/lib目錄
2.將angular2的第三方依賴放入dest/lib目錄
3.自動監測用戶寫的代碼,當文件發生修改時,自動將其編譯爲es5代碼,而後放入dest目錄
4.開啓一個本地服務器,讓用戶訪問http://localhost:3456/ 就能夠看到頁面效果
5.刪除dest目錄json
若是想了解gulp能夠翻下我以前的博客,或者直接gulp的中文站
'use strict'; var gulp = require('gulp'), del = require('del'), plumber = require('gulp-plumber'), rename = require('gulp-rename'), traceur = require('gulp-traceur'); var connect = require('gulp-connect'), open = require('gulp-open'), port = 3456; var PATHS = { src: { js: 'src/**/*.js', html: 'src/**/*.html' }, lib: [ 'node_modules/gulp-traceur/node_modules/traceur/bin/traceur-runtime.js', 'node_modules/es6-module-loader/dist/es6-module-loader-sans-promises.src.js', 'node_modules/systemjs/lib/extension-register.js', 'node_modules/angular2/node_modules/zone.js/dist/zone.js', 'node_modules/angular2/node_modules/zone.js/dist/long-stack-trace-zone.js', 'node_modules/reflect-metadata/Reflect.js', 'node_modules/reflect-metadata/Reflect.js.map', ] }; gulp.task('watch', function() { gulp.watch(PATHS.src.js, ['js']); gulp.watch(PATHS.src.html, ['html']); }); gulp.task('js', function() { return gulp.src(PATHS.src.js) .pipe(rename({ extname: '' })) .pipe(plumber()) .pipe(traceur({ modules: 'instantiate', moduleName: true, annotations: true, types: true, memberVariables: true })) .pipe(rename({ extname: '.js' })) .pipe(gulp.dest('dist')); }); gulp.task('html', function() { return gulp.src(PATHS.src.html) .pipe(gulp.dest('dist')); }); gulp.task('angular2', function() { var buildConfig = { paths: { "angular2/*": "node_modules/angular2/es6/prod/*.es6", "rx": "node_modules/angular2/node_modules/rx/dist/rx.js" }, meta: { 'rx': { format: 'cjs' } } }; var Builder = require('systemjs-builder'); var builder = new Builder(buildConfig); return builder.build('angular2/angular2', 'dist/lib/angular2.js', {}); }); gulp.task('libs', ['angular2'], function() { var size = require('gulp-size'); return gulp.src(PATHS.lib) .pipe(size({ showFiles: true, gzip: true })) .pipe(gulp.dest('dist/lib')); }); gulp.task('connect', function() { connect.server({ root: __dirname + '/dist', port: port, livereload: true }); }); gulp.task('open', function() { var options = { url: 'http://localhost:' + port, }; gulp.src('./index.html') .pipe(open('', options)); }); gulp.task('build', ['js', 'html']) gulp.task('default', ['build', 'libs']); gulp.task('serve', ['connect', 'open']); gulp.task('clean', function(done) { del(['dist'], done); });
5.tyconfig.json文件:定義了typescript編譯器如何從項目源文件生成javascript代碼
{ "compilerOptions": { "target": "es5", "module": "commonjs", "moduleResolution": "node", "sourceMap": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "removeComments": false, "noImplicitAny": false } }
6.typings.json文件:爲那些 TypeScript 編譯器沒法識別的庫提供了額外的定義文件。
{ "globalDependencies": { "core-js": "registry:dt/core-js#0.0.0+20160725163759", "jasmine": "registry:dt/jasmine#2.2.0+20160621224255", "node": "registry:dt/node#6.0.0+20160909174046" } }
7.systemjs.config.js文件:爲模塊加載器提供了該到哪裏查找應用模塊的信息,並註冊了全部必備的依賴包。它還包括文檔中後面的例子須要用到的包。
8.安裝package.json中列出的依賴包,這裏須要使用nodejs來定義須要使用的angular2版本和全部第三方依賴的版本
在node命令行中輸入 npm install
若是運行結束沒有生成typings目錄,則手動安裝 npm run typings install
9.定義該應用的宿主頁面,根目錄下建立index.html
10.編譯並運行應用程序 npm start
你會發現瀏覽器啓動了程序,而且編譯了app/app.component.ts文件並輸出全部相應的ts文件爲js文件,在你編輯文件保存後瀏覽器會自動刷新並會提示相應的錯誤