我正在尝试完成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
最佳答案
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
index-aot.html
此外,它还包含
build-invalid
gulp任务,该任务跳过了第二步,以显示它导致出现“无法解析'app.module.ngfactory'”错误。关于Angular AOT和汇总-无法解析 'app.module.ngfactory',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41740545/