让我们尝试使用ASP.NET Core + angular2(第一部分)
创建一个ASP.NET Core + Angular2应用程序(第1部分)
作业仓库在这里
出现的事物
-
- ASP.NET core MVC
-
- Entity Framework core
-
- Angular2
-
- Bootstrap4
-
- fontawesome
-
- Webpack
-
- Typescript
- Sass
这次我们将使用Visual Studio 2015 Update3。
虽然步骤可能有些不同,但在Mac等设备上也应该可以操作。
首先准备ASP.NET Core MVC环境
我选择了WebApi项目

为了在同一台服务器上运行angular2,需要启用静态文件。
要在同一台服务器上运行angular2,需要激活静态文件。
添加到依赖项
"Microsoft.AspNetCore.StaticFiles": "1.0.0"
在Startup.cs中的Configure方法中进行添加
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
..
app.UseStaticFiles();
..
}
创建用于运行Angular的视图
@{
Layout = "_Layout";
}
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>@ViewBag.Title</title>
<link rel="stylesheet" href="~/dist/vendor-style.css" />
<link rel="stylesheet" href="~/dist/app-style.css" />
</head>
<body>
@RenderBody()
<script src="~/dist/vendor.bundle.js"></script>
<script src="~/dist/app.bundle.js"></script>
</body>
</html>
@{
ViewData["Title"] = "Lanos CRM";
}
<div class="container">
<my-app class="container">Loading...</my-app>
</div>
制作游戏手柄
using Microsoft.AspNetCore.Mvc;
namespace core_angular2.Controllers
{
public class HomeController : Controller
{
[Route("")]
public IActionResult Index()
{
return View();
}
}
}
修改Properties/launchSettings中的初始显示路径。
将其空置
"launchUrl": "",
如果能做到这一点并运行,如果出现”加载中”的提示,那就可以了。
安装Angular2和其他所需的库
{
"name": "core_angular2",
"version": "1.0.0",
"scripts": {
"postinstall": "typings install",
"tsc": "tsc",
"tsc:w": "tsc -w",
"typings": "typings",
"webpack": "webpack"
},
"license": "ISC",
"dependencies": {
"@angular/common": "2.0.0-rc.3",
"@angular/compiler": "2.0.0-rc.3",
"@angular/core": "2.0.0-rc.3",
"@angular/forms": "0.1.1",
"@angular/http": "2.0.0-rc.3",
"@angular/platform-browser": "2.0.0-rc.3",
"@angular/platform-browser-dynamic": "2.0.0-rc.3",
"@angular/router": "3.0.0-alpha.7",
"@angular/router-deprecated": "2.0.0-rc.2",
"@angular/upgrade": "2.0.0-rc.3",
"angular2-in-memory-web-api": "0.0.12",
"bootstrap": "^4.0.0-alpha.2",
"core-js": "^2.4.0",
"font-awesome": "^4.6.3",
"jquery": ">=2.0.0 <3.0.0",
"reflect-metadata": "^0.1.3",
"rxjs": "5.0.0-beta.6",
"tether": "^1.3.2",
"zone.js": "^0.6.12"
},
"devDependencies": {
"css-loader": "^0.23.1",
"extract-text-webpack-plugin": "^1.0.1",
"file-loader": "^0.9.0",
"font-awesome-sass-loader": "^1.0.1",
"gulp": "^3.9.1",
"imports-loader": "^0.6.5",
"node-sass": "^3.8.0",
"sass-loader": "^4.0.0",
"style-loader": "^0.13.1",
"ts-loader": "^0.8.2",
"typescript": "^1.8.10",
"typings": "^1.0.4",
"url-loader": "^0.5.7",
"webpack": "^1.13.1",
"webpack-merge": "^0.14.0",
"webpack-stream": "^3.2.0"
}
}
npm安装!!
在根目录下执行 npm install 命令。
创建tsconfig
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
}
}
也创建typings
{
"globalDependencies": {
"core-js": "registry:dt/core-js#0.0.0+20160602141332",
"jasmine": "registry:dt/jasmine#2.2.0+20160621224255",
"node": "registry:dt/node#6.0.0+20160621231320"
}
}
将依赖模块整合到Typescript中。
import '../node_modules/core-js';
import '../node_modules/zone.js/dist/zone';
import "../node_modules/@angular/common";
import "../node_modules/@angular/compiler";
import "../node_modules/@angular/core";
import "../node_modules/@angular/forms";
import "../node_modules/@angular/http";
import "../node_modules/@angular/platform-browser";
import "../node_modules/@angular/platform-browser-dynamic";
import "../node_modules/@angular/router";
import "../node_modules/bootstrap/dist/js/bootstrap";
import '../node_modules/rxjs/Rx';
import '../node_modules/bootstrap/dist/css/bootstrap.css';
import '../node_modules/font-awesome/css/font-awesome.css';
require("font-awesome-sass-loader");
整理自己定义的风格
import './styles/sample.scss'; /* 適当なscssを作って試すといい */
整理Angular2的代码
import { bootstrap } from '@angular/platform-browser-dynamic';
import { AppComponent } from './app.component';
bootstrap(AppComponent);
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: '<h1>My First Angular 2 App<span class="fa fa-flag"></span></h1>'
})
export class AppComponent { }
使用webpack将所需的模块打包并使用
var webpack = require('webpack');
var path = require('path');
var ExtractTextPlugin = require("extract-text-webpack-plugin");
// Webpack Config
var webpackConfig = {
entry: {
'app': './Client/app/app.ts',
'vendor': './Client/vendor.ts',
'app-style': './Client/app-style.ts',
'vendor-style': './Client/vendor-style.ts',
},
devtool: 'source-map',
cache: true,
output: {
path: './wwwroot/dist',
filename: '[name].bundle.js',
sourceMapFilename: '[name].map',
chunkFilename: '[id].chunk.js'
},
resolve: {
extensions: ['', '.ts', '.js']
},
plugins: [
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
"window.jQuery": "jquery"
}),
new webpack.ProvidePlugin({ "window.Tether": "tether" }),
new webpack.optimize.CommonsChunkPlugin({ name: ['app', 'vendor', 'polyfills'], minChunks: Infinity }),
new ExtractTextPlugin("[name].css"),
new webpack.optimize.DedupePlugin()
],
module: {
loaders: [
// .ts files for TypeScript
{ test: /\.ts$/, loader: 'ts-loader' },
{ test: /\.css$/, loader: ExtractTextPlugin.extract("style-loader", "css-loader") },
{ test: /\.scss$/,loader: ExtractTextPlugin.extract("style-loader", "css-loader!sass-loader") },
{ test: /\.sass$/,loader: ExtractTextPlugin.extract("style-loader", "css-loader!sass-loader") },
{ test: /\.less$/,loader: ExtractTextPlugin.extract("style-loader", "css-loader!less-loader") },
{ test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: "url-loader?limit=10000&mimetype=application/font-woff" },
{ test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: "file-loader" }
]
}
};
var webpackMerge = require('webpack-merge');
module.exports = webpackMerge(webpackConfig);
编译并执行该代码
在根目录下执行 npm run webpack
- 当您在 Visual Studio 中进行调试时,应该会显示“我的第一个 Angular 2 应用程序”。
如果出现了就代表成功。
更多 duō)
-
- VisualStudioの機能でビルド前後や起動時にnpmコマンドを挟み込んだりできので、webpackコマンドをどこかに入れると便利
- webpackのコンパイルが遅いのでwebpack-dev-serverを入れると便利
下次 or 下一次.
目前,我仍未开始涉足ASP.NET和angular的组合使用,但我计划在接下来的工作中处理它们的整合,以及进行EntityFramework的设置和认证等方面的任务。
我也做了EF的设置。
我非常感谢公式文件的帮助。