这是本人的第一篇博客。javascript
我是一名比较喜欢追求新技术的野生程序员,技术水平有限,只是想记录和分享一些我的心得体会,文章中如有不正确之处,请海涵!css
对于一个没有学过TypeScript,不了解ES五、Node.Js的初学者来讲,想要直接学习Angular2真的是一件很苦难的事情。html
本文使用Visual Studio2015建立一个含基架的ASP.NET Core MVC项目,而后将https://angular.cn/docs/ts/latest/guide/setup.html一文中的《快速起步》种子与项目结合起来(在静态页面中运行起来)。java
请参阅https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-mvc-app/start-mvc。node
请在https://angular.cn/docs/ts/latest/guide/setup.html文章中下载《快速起步》种子,并解压。程序员
将quickstart-master文件夹下的全部文件包括文件夹复制到基架项目根目录下,复制后NPM会自动安装依赖项。(我在这里遇到了某个包的测试文件与ASP.NET Core不兼容的问题,我把这几个文件删掉了,不知道有没有其余办法解决)web
将src中的全部文件包括文件夹移入wwwroot文件夹中,再将app文件夹和e2e文件夹移动到项目根目录(与wwwroot同级),将main.ts移动到app文件夹中。最后将tsconfig.json移动到项目根目录下,此时文件夹结构应该以下图:chrome
修改tsconfig.json,加入保存时自动编译、输出文件夹位置、排除无用文件夹。修改后ts文件会自动编译后输出到wwwroot中(默认状况下配置了静态文件的MVC项目,而且放置在wwwroot中的文件才能被客户端直接读取)。typescript
{ "compileOnSave": true, "compilerOptions": { "target": "es5", "module": "commonjs", "moduleResolution": "node", "sourceMap": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "lib": [ "es2015", "dom" ], "noImplicitAny": true, "suppressImplicitAnyIndexErrors": true, "outDir": "./wwwroot" }, "exclude": [ "node_modules", "**/*.spec.ts" ] }
修改package.json,加入gulp,gulp加入到devDependencies下便可,它能够帮助咱们自动移动类库等。下面仅列出devDependencies部分,其他部分未修改。npm
"devDependencies": { "concurrently": "^3.2.0", "lite-server": "^2.2.2", "typescript": "~2.1.0", "gulp": "3.9.1", "canonical-path": "0.0.2", "tslint": "^3.15.1", "lodash": "^4.16.4", "jasmine-core": "~2.4.1", "karma": "^1.3.0", "karma-chrome-launcher": "^2.0.0", "karma-cli": "^1.0.1", "karma-jasmine": "^1.0.2", "karma-jasmine-html-reporter": "^0.2.2", "protractor": "~4.0.14", "rimraf": "^2.5.4", "@types/node": "^6.0.46", "@types/jasmine": "2.5.36" },
因为咱们使用了MVC框架项目,没有使用Node.Js服务器,“种子”中的index.html是没法访问node_modules文件夹的,咱们须要把这些类库(js)所有移动到wwwroot文件夹中,这种烦人的工做就交给gulp来作吧。
visual studio中的gulp使用能够参考https://docs.microsoft.com/zh-cn/aspnet/core/client-side/using-gulp。
在根目录下新建一个gulp配置文件:gulpfile.js,具体代码以下:
1 var gulp = require('gulp'); 2 3 gulp.task('moveToLibs', function (done) { 4 gulp.src([ 5 'node_modules/core-js/client/shim.min.js', 6 'node_modules/zone.js/dist/zone.js', 7 'node_modules/systemjs/dist/system.src.js', 8 'node_modules/@angular/core/bundles/core.umd.js', 9 'node_modules/@angular/platform-browser/bundles/platform-browser.umd.js', 10 'node_modules/@angular/common/bundles/common.umd.js', 11 'node_modules/@angular/router/bundles/router.umd.js', 12 'node_modules/@angular/forms/bundles/forms.umd.js', 13 'node_modules/angular-in-memory-web-api/bundles/in-memory-web-api.umd.js', 14 'node_modules/@angular/compiler/bundles/compiler.umd.js', 15 'node_modules/@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js', 16 'node_modules/@angular/http/bundles/http.umd.js' 17 ]).pipe(gulp.dest('./wwwroot/libs/')); 18 19 gulp.src([ 20 'node_modules/rxjs/**/*.js' 21 ]).pipe(gulp.dest('./wwwroot/libs/rxjs/')); 22 });
运行一下这个任务,在wwwroot中就能够看到这些类库了。
因为以前的步骤,咱们的文件夹结构与本来的例子有一些区别,咱们须要修改那些路径。
(function (global) { System.config({ paths: { 'npm:': 'libs/' }, map: { 'app': 'app', '@angular/core': 'npm:core.umd.js', '@angular/common': 'npm:common.umd.js', '@angular/compiler': 'npm:compiler.umd.js', '@angular/platform-browser': 'npm:platform-browser.umd.js', '@angular/platform-browser-dynamic': 'npm:platform-browser-dynamic.umd.js', '@angular/http': 'npm:http.umd.js', '@angular/router': 'npm:router.umd.js', '@angular/forms': 'npm:forms.umd.js', 'rxjs': 'npm:rxjs', 'angular-in-memory-web-api': 'npm:in-memory-web-api.umd.js' }, packages: { app: { defaultExtension: 'js', meta: { './*.js': { loader: 'systemjs-angular-loader.js' } } }, rxjs: { defaultExtension: 'js' } } }); })(this);
index.html中的路径部分也须要修改
<!DOCTYPE html> <html> <head> <title>Angular QuickStart</title> <base href="/"> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="styles.css"> <!-- Polyfill(s) for older browsers --> <script src="libs/shim.min.js"></script> <script src="libs/zone.js"></script> <script src="libs/system.src.js"></script> <script src="systemjs.config.js"></script> <script> System.import('app/main.js').catch(function(err){ console.error(err); }); </script> </head> <body> <my-app>Loading AppComponent content here ...</my-app> </body> </html>
运行项目前先检查一下wwwroot/app中是否已经生成了app.component.js、app.module.js、main.js三个文件。
若是他们都在了,那么运行项目吧,因为是MVC项目,默认首页是Home/Index对应的Controller和View,请在路径后加index.html访问wwwroot/index.html这个静态首页。
这样在ASP.NET Core MVC中基于TypeScript的Angular2项目的本地环境就搭建完成了。