我正在尝试完成Angular的AOT教程:
https://angular.io/docs/ts/latest/cookbook/aot-compiler.html
使用ngc
部分可以生成aot
文件夹。
但是,当涉及rollup
部分的树摇动时,我遇到了这个错误:
Error: Could not resolve '../aot/app/app.module.ngfactory' from ...\app\main-aot.js
at Error (native)
at ...\node_modules\rollup-plugin-node-resolve\dist\rollup-plugin-node-resolve.cjs.js:78:21
at ...\node_modules\resolve\lib\async.js:56:18
at load (...\node_modules\resolve\lib\async.js:70:43)
at onex (...\node_modules\resolve\lib\async.js:93:31)
at ...\node_modules\resolve\lib\async.js:23:47
at FSReqWrap.oncomplete (fs.js:82:15)
我错过了什么吗?
@angular:2.4.4
汇总:0.41.4
答案 0 :(得分:6)
Angular的AOT教程似乎缺少一步;使用ngc
后,它只在ts
文件夹中生成aot
个文件。下一步,您需要再次编译这些文件,以生成必要的js
文件。
这里有两个重要的注释:
ts
文件编译为es2015
个模块,以便从“树木震动”中受益。这意味着必须有一个仅指向tsconfig-compile-aot.json
文件的配置文件(main-aot.ts
)。ts
文件将编译为es2015
个模块。如果您在开发环境中使用systemjs
作为模块加载器和commonjs
模块(如在Angular的教程中),那么在使用rollup
之后,您需要编译ts
将文件再次作为commonjs
个模块,以避免systemjs
。以下是具体步骤:
app.module
与ngc
和tsconfig-aot.json
编译为aot
个文件夹作为es2015
个模块。main-aot.ts
和tsc
再次编译tsconfig-compile-aot.json
个文件,再次作为es2015
个模块,并生成js
个文件。main-aot.js
)传递给rollup
。现在它应该生成你的输出文件而没有任何错误。systemjs
继续开发,请使用app/ts
编译tsconfig.json
个文件,将其再次转换为commonjs
个模块。我创建了一个使用这些步骤的演示应用程序:
https://github.com/forCrowd/Labs-Angular-AOTConfiguration
gulp
- default
任务index.html
“开发 - SystemJS”案例index-aot.html
进行“制作 - AOT& Rollup Tree-shaking”案例它还包含跳过第二步的build-invalid
gulp任务,以显示它导致“无法解析'app.module.ngfactory'”错误。