延迟加载模块中的 Angular single-spa 延迟加载路由调用未定义的 webpack 错误

Posted

技术标签:

【中文标题】延迟加载模块中的 Angular single-spa 延迟加载路由调用未定义的 webpack 错误【英文标题】:Angular single-spa lazy loaded routes in lazy loaded modules give call of undefined webpack error 【发布时间】:2020-04-05 20:56:33 【问题描述】:

我使用带角度的单水疗中心。我有一个外壳和一个子应用程序,当我的子应用程序具有延迟加载的模块时,RootModule 加载了加载 SubModule 的加载 SuperSubModule。所有这些路由都是延迟加载的路由。当我在没有 single-spa 和 single-spa webpack 配置的情况下为我的应用程序提供服务时,这可以正常工作。但是当我在生产模式和 aot 下构建我的应用程序时,当我导航到该 url 时,延迟加载的路由 SubModule 到 SuperSubModule 会出错。错误是:

ERROR 错误:未捕获(承诺中):TypeError:无法读取属性 未定义类型错误的“调用”:无法读取属性“调用” 不明确的 在 o(引导程序:63) 在 ZoneDelegate.invoke (zone.js:396) 在 Object.onInvoke (main.js:1) 在 ZoneDelegate.invoke (zone.js:395) 在 Object.onInvoke (core.js:39699) 在 ZoneDelegate.invoke (zone.js:395) 在 Zone.run (zone.js:153) 在 zone.js:894 在 ZoneDelegate.invokeTask (zone.js:431) 在 Object.onInvokeTask (main.js:1) 在 resolvePromise (zone.js:836) 在 resolvePromise (zone.js:795) 在 zone.js:897 在 ZoneDelegate.invokeTask (zone.js:431) 在 Object.onInvokeTask (main.js:1) 在 ZoneDelegate.invokeTask (zone.js:430) 在 Object.onInvokeTask (core.js:39680) 在 ZoneDelegate.invokeTask (zone.js:430) 在 Zone.runTask (zone.js:198) 在 drainMicroTaskQueue (zone.js:611)

当我再次单击该模块的 url 时,错误是: ERROR 错误:未捕获(承诺中):错误:未找到“未定义”的 NgModule 元数据。

错误:未找到“未定义”的 NgModule 元数据。 在 lg.resolve (compiler.js:20900) 在 Th.getNgModuleMetadata (compiler.js:20029) 在 Jg._loadModules (compiler.js:25824) 在 Jg._compileModuleAndComponents (compiler.js:25807) 在 Jg.compileModuleAsync (compiler.js:25769) 在 useClass.compileModuleAsync (platform-b​​rowser-dynamic.js:223) 在 c.project (router.js:6406) 在 c._tryNext (mergeMap.js:46) 在 c._next (mergeMap.js:36) 在 c.next (Subscriber.js:50) 在 resolvePromise (zone.js:836) 在 resolvePromise (zone.js:795) 在 zone.js:897 在 ZoneDelegate.invokeTask (zone.js:431) 在 Object.onInvokeTask (main.js:1) 在 ZoneDelegate.invokeTask (zone.js:430) 在 Object.onInvokeTask (core.js:39680) 在 ZoneDelegate.invokeTask (zone.js:430) 在 Zone.runTask (zone.js:198) 在 drainMicroTaskQueue (zone.js:611)

有人知道如何解决这个问题吗?欢迎任何反馈,我已经被这个问题困扰了好几天了。 提前致谢! 编辑:这只发生在生产模式和使用单水疗时,而不是在生产模式下独立服务时。

【问题讨论】:

我也有同样的问题。 我的解决方案位于:single-spa.js.org/docs/faq/#code-splits 您必须执行解决方案 1 和 2 才能使其正常工作,在我们的案例中 2 被遗忘了。 @Hack 【参考方案1】:

答案在 single-spa 的常见问题解答中: https://single-spa.js.org/docs/faq/#code-splits 您必须执行解决方案 1 和 2 才能使其正常工作,在我们的案例中 2 错过了。

【讨论】:

以上是关于延迟加载模块中的 Angular single-spa 延迟加载路由调用未定义的 webpack 错误的主要内容,如果未能解决你的问题,请参考以下文章

Angular2延迟加载模块错误'找不到模块'

如何检查 Angular 模块延迟加载是不是适用于 Chrome?

延迟加载到Angular 2中的空路由以外的路由

Angular 9 嵌套延迟加载模块,带有嵌套路由器出口

有没有办法在 Angular 中延迟加载组件而不是模块?

Angular2 无法使用延迟模块加载的自定义重用策略