Angular 2 AOT和延迟加载,而不使用Angular CLI
我使用的是一个非常简单的Angular 2应用程序,我没有使用Angular CLI(出于这个特定问题,请不要建议我使用CLI)。使用JIT编译器时,站点运行时不会出现任何问题。急切加载的模块和延迟加载的模块都很好 我可以成功运行AOT编译器,然后使用Rollup执行树抖动,如中所述。当这样做的时候,站点运行时没有任何问题,但是我在尝试转到急切加载的模块时遇到了一个错误。下面是错误消息:Angular 2 AOT和延迟加载,而不使用Angular CLI,angular,lazy-loading,angular2-aot,Angular,Lazy Loading,Angular2 Aot,我使用的是一个非常简单的Angular 2应用程序,我没有使用Angular CLI(出于这个特定问题,请不要建议我使用CLI)。使用JIT编译器时,站点运行时不会出现任何问题。急切加载的模块和延迟加载的模块都很好 我可以成功运行AOT编译器,然后使用Rollup执行树抖动,如中所述。当这样做的时候,站点运行时没有任何问题,但是我在尝试转到急切加载的模块时遇到了一个错误。下面是错误消息:GEThttp://atticus.local/app/contacts/contacts.module.ng
GEThttp://atticus.local/app/contacts/contacts.module.ngfactory 404(未找到)
(这是我试图延迟加载的模块)
首先是一个非常基本的问题:
- 在进行AOT和树抖动时,使用延迟加载是否有意义?你还有福利吗
*.ngfactory.ts
或*.ngsummary.json
,但只为急切加载的模块创建。这也许有道理
作为参考,我为AOT运行的命令是ngc-p tsconfig AOT.json
,其中包含以下tsconfig AOT.json
{
"compilerOptions": {
"target": "es5",
"module": "es2015",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": [
"es2015",
"dom"
],
"noImplicitAny": true,
"suppressImplicitAnyIndexErrors": true,
"typeRoots": [
"node_modules/@types/"
]
},
"files": [
"app/app.module.ts",
"app/main-aot.ts"
],
"angularCompilerOptions": {
"genDir": "aot",
"skipMetadataEmit": true
}
}
然后我运行了rollup-c rollup config.js
,以便rollup执行树抖动。下面是汇总配置.js
:
import rollup from 'rollup'
import nodeResolve from 'rollup-plugin-node-resolve'
import commonjs from 'rollup-plugin-commonjs';
import uglify from 'rollup-plugin-uglify'
//paths are relative to the execution path
export default {
entry: 'app/main-aot.js',
dest: 'aot/dist/build.js', // output a single application bundle
sourceMap: true,
sourceMapFile: 'aot/dist/build.js.map',
format: 'iife',
plugins: [
nodeResolve({ jsnext: true, module: true }),
commonjs({
include: ['node_modules/rxjs/**']
}),
uglify()
]
}
请让我知道,如果我可以提供更多的信息或更清楚。谢谢大家! 汇总还不支持代码拆分。这是github的一个问题 您可以通过使用webpack实现这一点。它支持代码拆分、延迟加载和树生成 在进行AOT和树抖动时,使用延迟加载是否有意义?你还有福利吗 为什么不呢?您仍然可以减少应用程序的启动时间,因为只需加载第一个模块。但是,您可以使用正确的预加载策略自动加载其他文件 费边