天天看点

RouterModule.forRoot() called twice

错误消息:

RouterModule.forRoot() called twice

Spartacus 版本:2.1.7

确保您的缓存(来自 CDN 和 ServiceWorker)已正确调整。 OCC调用也应该尽量缓存在CDN上。

我们查看了源代码,尤其是旨在延迟加载的 HomeModule,并发现该方法存在一个过时的问题,结果导致报告的错误:

HomeModule 正在导入 B2cStorefrontModule,它在任何情况下都不应该被导入两次,尤其是不应该被延迟加载。

任何延迟加载的模块都应该只导入最必要的模块以避免额外的性能影响,这对于像 B2cStorefrontModule(完整的 b2c 店面 recipe)这样的配方模块尤其重要。

如果你想在自定义模块中提供配置,你应该使用 ConfigModule.withConfig() 或 provideConfig 实用程序 (https://sap.github.io/spartacus-docs/global-configuration-in-spartacus/)。

通常,在高度定制的店面中,我们建议根本不使用这些配方模块,而是通过仅导入所需的模块来构建个性化定制的店面。此外,我们正在弃用 3.x 中的 b2cStorefrontModule,并计划完全删除它以支持标准化的参考结构。你可以在这里阅读:

https://sap.github.io/spartacus-docs/reference-app-structure/

B2cStorefrontModule 将默认 b2c 店面的所有默认模块包装到一个巨大的模块中,它允许快速设置店面(通过一次导入和提供 withConfig 配置的能力),因此它更适合快速设置 spartacus,而不是在其上构建复杂的自定义 .

本地执行和 CCv2(开发、阶段或生产)之间的延迟加载不应该有任何差异。

继续阅读