在aot / prod模式下的角延迟加载

时间:2018-09-21 08:50:58

标签: angular lazy-loading

im使用Angular 6,并且有两种方法可以在Angular中进行延迟加载模块:

第一种方法:将模块路径指定为字符串

{path: 'debug', loadChildren: 'app/global/debug.module/debug.module#DebugModule'},

第二种方法:将模块指定为功能签名

{path: 'login', loadChildren: () => LoginMockModule},

在dev模式下,buth方法有效,但是在prod模式下,第二种方法给我以下错误:

ERROR Error: Uncaught (in promise): Error: Runtime compiler is not loaded Error: Runtime compiler is not loaded

有人可以解释为什么第二种方法在生产模式下不起作用。我想使用此模式,因为

  1. 错误较少,因为IDE可以检查模块是否正确导入
  2. 因为IDE知道导入的模块已经移动,所以保存重构/移动模块的时间。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

这是在angular-cli Github(GitHub issue link)上经常出现的问题。问题在于AOT的使用,因为默认情况下prod模式使用AOT。您可以找到由angular-cli开发人员之一提供的简短说明:

  

Angular CLI仅通过loadChildren字符串语法支持惰性路由检测,而repro则使用函数。由于没有检测到并通过AOT编译了惰性路由,因此出现了该错误。

所以...剩下的唯一一件事就是希望它将在以后的发行版中得到修复。同时,唯一的方法是使用loadChildren