Ответ 1
Я наконец-то работал, вижу свое репо Angular2 Webpack2 DotNET Starter
Существует несколько трюков. Обратите внимание, что компиляция AOT не поддерживает никаких операторов require()
в ваших компонентах Angular 2. Они должны быть преобразованы в выражения import
.
Сначала вам нужно иметь второй tsconfig.json
файл со специальными параметрами для компиляции AOT. Я назначаю это с расширением .aot.json
.
tsconfig.aot.json:
{
"compilerOptions": {
"target": "es5",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": false,
"noEmitHelpers": true,
"pretty": true,
"strictNullChecks": false,
"baseUrl": ".",
"sourceMap": true,
"sourceRoot": ".",
"lib": [
"es6",
"dom"
],
"types": [
"lodash",
"hammerjs",
"jasmine",
"node",
"selenium-webdriver",
"source-map",
"uglify-js",
"webpack",
"materialize-css",
"jquery",
"kendo-ui"
],
"typeRoots": [
"./node_modules/@types"
],
"outDir": "./compiled/src"
},
"exclude": [
"./node_modules",
"./**/*.e2e.ts",
"./**/*.spec.ts",
],
"awesomeTypescriptLoaderOptions": {
"useWebpackText": true,
"forkChecker": true,
"useCache": true
},
"compileOnSave": false,
"buildOnSave": false,
"atom": {
"rewriteTsconfig": false
},
"angularCompilerOptions": {
"genDir": "./compiled/aot",
"debug": true
}
}
Вам также понадобится точная правильная комбинация ведий Angular2. @angular/[email protected]
и @angular/[email protected]
НЕ работали для меня, мне пришлось использовать 2.0.0
для обоих или ngc
не удалось скомпилировать файлы AOT. Вот что я успешно использую:
package.json:
"dependencies": {
"@angular/core": "2.0.0",
"@angular/common": "2.0.0",
"@angular/compiler": "2.0.0",
"@angular/compiler-cli": "0.6.2",
"@angular/forms": "^2.0.1",
"@angular/http": "2.0.0",
"@angular/platform-browser": "2.0.0",
"@angular/platform-browser-dynamic": "2.0.0",
"@angular/platform-server": "2.0.0",
"@angular/router": "3.0.0",
"@angular/tsc-wrapped": "0.3.0"
}
Кроме того, вам понадобятся несколько отличных загрузчиков веб-пакетов, а также возможность просмотра веб-страницы в папке ./src
, а также для папки, на которую выводятся ваши скомпилированные файлы AOT. (*.component.ngfactory.ts
)
Эта последняя часть очень важна! Если вы не сообщите веб-папке о включении этих папок, это не сработает. В этом примере файлы AOT выводятся в /aot-compiled
в корневой папке.
webpack.common.js
loaders: [
{
test: /\.ts$/,
include: [helpers.paths.appRoot, helpers.root('./compiled/aot')],
exclude: [/\.(spec|e2e)\.ts$/],
loaders: [
'@angularclass/hmr-loader',
'awesome-typescript-loader',
'angular2-template-loader',
'angular2-router-loader?loader=system',
"angular2-load-children-loader" // this loader replaces loadChildren value to work with AOT/JIT
],
},
]
Чтобы сгенерировать ваши файлы AOT, вам понадобится NPM script, чтобы сделать это для вас
package.json
"scripts": {
"compile:aot": "./node_modules/.bin/ngc -p ./tsconfig.aot.json",
}
Вам также нужно будет настроить конфигурацию вашего веб-пакета версии AOT app.bootstrap.ts
, которая отличается от версии JIT. Я различаю его с расширением .aot.ts
, так что в процессе производства webpack использует AOT (app.bootstrap.aot.ts
), но в режиме dev он использует JIT с webpack-dev-server
(app.bootstrap.ts
).
Наконец, вы запустите npm run compile:aot
FIRST.
Когда ваши файлы AOT выводятся на диск, вы запускаете свою сборку webpack с помощью webpack
или webpack-dev-server
.
Для рабочего примера см. мое репо Angular2 Webpack2 DotNET Starter. Он интегрирован с .NET Core 1.0, но для тех, кто не использует .NET, вы все равно можете видеть, как настроены Webpack 2 и Angular 2.