, , webpack ASP.NET MVC. , , . .
Github

1.
: . mvc5- angular -webpack,
mvc5-angular-webpack/
โโโ Server/
โ โโโ WebApplication/
โ โ โโโ Controllers/
โ โ โโโ Scripts/
โ โ โโโ Web.config
โ โ โโโ Many more folder and file...
โ โ
โ โโโ Web-Core.sln
โ
โโโ Client/
โโโ modules
โ โโโ angularModule-1/
โ โ โโโ main.ts
โ โ โโโ app.modules.ts
โ โ โโโ app.component.ts
โ โ โโโ Many more file...
โ โ
โ โโโ angularModule-2/
โ โ โโโ main.ts
โ โ โโโ app.modules.ts
โ โ โโโ app.component.ts
โ โ โโโ Many more file...
โ โโโ polyfill.ts
โ โโโ vendor.ts
โ
โโโ build.bat
โโโ npm-shrinkwrap.json
โโโ package.json
โโโ tsconfig.json
โโโ tslint.json
โโโ webpack.config.js
- MVC
Web-Core.sln
, #. - . ,
build.bat
. . , .
- , Razor. , AngularJS Angular.
2. webpack
, typescript
npm
. , webpack.config.js
const webpack = require('webpack')
const path = require('path')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const entryPath = path.resolve(__dirname, 'modules')
const corePath = path.resolve(__dirname, '../Server/WebApplication/Scripts/ng2')
const module1 = `${entryPath}/angularModule-1`
const module2 = `${entryPath}/angularModule-2`
module.exports = (envOptions) => {
envOptions = envOptions || {};
const config = {
entry: {
'polyfills': `${entryPath}/polyfill.ts`,
'vendors': `${entryPath}/vendor.ts`,
'module1': `${module1}/main.ts`,
'module2': `${module2}/main.ts`
},
output: {
path: corePath,
filename: '[name].js',
sourceMapFilename: "[name].js.map"
},
resolve: {
extensions: ['.ts', '.js', '.html']
},
module: {
rules: [
{
test: /\.ts$/,
loaders: ['awesome-typescript-loader', 'angular2-template-loader']
},
{
test: /\.html$/,
loader: 'raw-loader'
},
{
test: /\.css$/,
loader: 'raw-loader'
}
]
},
devtool: 'source-map',
plugins: [
new webpack.NoEmitOnErrorsPlugin(),
new webpack.optimize.CommonsChunkPlugin({
name: ['vendors', 'polyfills']
})
]
}
if (envOptions.MODE === 'prod') {
config.plugins.push(
new UglifyJsPlugin()
)
}
return config;
}
Scripts/ng2 .
3. npm script
webpack
script . package.json
"scripts": {
"tsc": "tsc",
"tsc:w": "tsc -w",
"dev": "webpack-dev-server --https --open",
"watch": "webpack --config webpack.config.js --watch",
"build": "webpack --config webpack.config.js",
"build:html": "webpack --config webpack-html-plugin.config.js --env.MODE=prod",
"build:prod": "webpack --config webpack.config.js --env.MODE=prod"
}
4. build.bat
Angular 2 - front-end WebApplication
. - , front-end. front-end , WebApplication
.
build.bat
, , . .
call npm install
echo "Build Angular projects"
npm run build:prod
call
, .
script . -, npm . build:prod
, package.json
. Webpack , Typescript JavaScript vendors.js
, polyfills.js
module1.js
.
Jenkins , build.bat
, . , , .
5. JavaScript .
, . my-angular-app
- , app.component.ts
Index.cshtml
<script src="~/Scripts/ng2/polyfills.js"></script>
<script src="~/Scripts/ng2/vendors.js"></script>
<script src="~/Scripts/ng2/module1.js"></script>
<my-angular-app>
Loading...
</my-angular-app>
HomeController.cs
public ActionResult Module1()
{
return View();
}
. . JavaScript , - - . . 3 .
. html-webpack-plugin
front-end, webpack
html-webpack-plugin, , . , JavaScript .
webpack-html-webpack-plugin.config.js
...
const HtmlWebpackPlugin = require('html-webpack-plugin');
const viewPath = path.resolve(
__dirname,
"../Server/WebApplication/Views/Home"
);
...
entry: {
polyfills: `${entryPath}/polyfill.ts`,
vendors: `${entryPath}/vendor.ts`,
module1: `${module1}/main.ts`
},
output: {
path: corePath,
filename: "[name].[hash].js",
sourceMapFilename: "[name].[hash].js.map"
}
....
plugins: [,
...,
new HtmlWebpackPlugin({
template: viewPath + "/loader.cshtml",
filename: viewPath + "/Module1.cshtml",
inject: false
})
]
cshtml loader.cshtml
loader.cshtml
<% for (var chunk in htmlWebpackPlugin.files.chunks) { %>
<script src="<%= htmlWebpackPlugin.files.chunks[chunk].entry %>"></script>
<% } %>
<my-angular-app>
Loading...
</my-angular-app>
npm run build:html
, package.json
. , .


@{
ViewBag.Title = "Module 1";
}
<script src="../../Scripts/ng2/vendors.1470de344a0f2260b700.js"></script>
<script src="../../Scripts/ng2/vendors.1470de344a0f2260b700.js"></script>
<script src="../../Scripts/ng2/module1.1470de344a0f2260b700.js"></script>
<my-angular-app>Loading....</my-angular-app>
II. JavaScript
ASP.NET MVC , Angular. JS. , , . - , . , .
<script src="@string.Format("{0}?v={1}", "~/Scripts/ng2/polyfills.js", VersionHelper.CurrentVersion())</script>
<script src="@string.Format("{0}?v={1}", "~/Scripts/ng2/vendors.js", VersionHelper.CurrentVersion())</script>
<script src="@string.Format("{0}?v={1}", "~/Scripts/ng2/module1.js", VersionHelper.CurrentVersion())</script>
<script src="~/Scripts/ng2/polyfills.js?v=1.1.0"></script>
<script src="~/Scripts/ng2/vendors.js?v=1.1.0"></script>
<script src="~/Scripts/ng2/module1.js?v=1.1.0"></script>
III. ASP.NET
Zyllem - , JavaScript .
App_Start\BundleConfig.cs
. , module1
bundles.Add(new ScriptBundle("~/bundles/module1").Include(
"~/Scripts/ng2/polyfills.js",
"~/Scripts/ng2/vendors.js"
"~/Scripts/ng2/module1.js"));
, .
Index.cshtml
@Scripts.Render("~/bundles/module1")
, , . - script.
<script src="/bundles/module1?v=2PbUw0z_gh_Ocp_Vz13rdmmBSG6utLJAXm2lThxYAow1"></script>
, .


Github https://github.com/trungk18/mvc5-angular-webpack