使用延迟加载的模块和systemjs进行Angular2 AOT编译

时间:2016-11-21 14:01:19

标签: angular angular2-routing angular2-aot angular2-modules

简短版本:

angular2(当前为2.2.1)是否使用systemJS按照快速入门的方式使用延迟加载的模块并提前编译?

更长的版本:

我对angular2很新,并且一直关注angular.io上的快速入门和其他文档,创建一个包含几个组件的简单站点,分离到通过路由延迟加载的模块中。

所以请点击此处:https://angular.io/docs/ts/latest/cookbook/aot-compiler.html

我已按照所有说明进行操作,我已在aot文件夹中输出'" node_modules / .bin / ngc" -p tsconfig-aot.json'命令,我有一个' build.js'运行'" node_modules / .bin / rollup"后,在我的dist文件夹中生成文件-c rollup-config.js'命令。

我已经设置了我的index.html删除system.js并改为引用我的build.js输出。

我最初的尝试失败了,抱怨说它不知道什么是“系统”。是。我想在构建过程中,我不再需要system.js,所以不确定那里发生了什么。

如果我包含system.js并再次运行,我会在错误中得到以下堆栈跟踪:

  

无法加载资源:服务器响应状态为404(未找到)   build.js:3 EXCEPTION:未捕获(在承诺中):错误:(SystemJS)XHR错误(404 Not Found)loading http://localhost:3000/app/shell/layout.module.ngfactory       错误:XHR错误(404 Not Found)loading http://localhost:3000/app/shell/layout.module.ngfactory           在XMLHttpRequest.wrapFn [as _onreadystatechange](http://localhost:3000/node_modules/zone.js/dist/zone.js:698:29)           在ZoneDelegate.invokeTask(http://localhost:3000/node_modules/zone.js/dist/zone.js:265:35)           at Object.onInvokeTask(http://localhost:3000/dist/build.js:4:15086)           在ZoneDelegate.invokeTask(http://localhost:3000/node_modules/zone.js/dist/zone.js:264:40)           在Zone.runTask(http://localhost:3000/node_modules/zone.js/dist/zone.js:154:47)           在XMLHttpRequest.ZoneTask.invoke(http://localhost:3000/node_modules/zone.js/dist/zone.js:335:33)       加载http://localhost:3000/app/shell/layout.module.ngfactory时出错   (SystemJS)XHR错误(404 Not Found)loading http://localhost:3000/app/shell/layout.module.ngfactory       错误:XHR错误(404 Not Found)loading http://localhost:3000/app/shell/layout.module.ngfactory           在XMLHttpRequest.wrapFn [as _onreadystatechange](http://localhost:3000/node_modules/zone.js/dist/zone.js:698:29)           在ZoneDelegate.invokeTask(http://localhost:3000/node_modules/zone.js/dist/zone.js:265:35)           at Object.onInvokeTask(http://localhost:3000/dist/build.js:4:15086)           在ZoneDelegate.invokeTask(http://localhost:3000/node_modules/zone.js/dist/zone.js:264:40)           在Zone.runTask(http://localhost:3000/node_modules/zone.js/dist/zone.js:154:47)           在XMLHttpRequest.ZoneTask.invoke(http://localhost:3000/node_modules/zone.js/dist/zone.js:335:33)       加载http://localhost:3000/app/shell/layout.module.ngfactory

时出错

很奇怪它正在尝试加载' http://localhost:3000/app/shell/layout.module.ngfactory',这是我的一个懒惰加载的模块。

AOT是否不适用于延迟加载的模块?

2 个答案:

答案 0 :(得分:3)

我认为问题不在于AOT,但汇总不适用于延迟加载的模块,因为汇总不支持代码拆分(但是,&#39) ; s open issue)。因为汇总只能产生一个输出文件,所以没有延迟加载的概念 - 一切都已经加载了!

答案 1 :(得分:0)

是。使用loadChildren的Angular2快速入门在AOT中无法正常工作。 您可以在JiT中进行开发并等待角度,汇总的升级。 或者您可以使用webpack而不是汇总。 Angular-cli现在支持AOT和延迟加载。你可以尝试https://github.com/angular/angular-cli/