spartacus-storefront - 延迟加载的覆盖或自定义 CMS 组件
问题描述
我试图在2.1.4版的正在进行的 Spartacus 项目上测试延迟加载的 CMS 组件,但我无法正确显示这些组件。在继续进一步调查之前,我只想检查几件事:
- 是否可以延迟加载我们已经覆盖的组件,例如 BannerComponent、SearchBoxComponent ...?
- 是否可以在自定义 CMS 组件上应用延迟加载?
- 当此功能不起作用时是否有任何限制?也许与其他一些功能相结合?
我们在项目中覆盖了许多 OOTB Spartacus CMS 组件,我已经为其中几个定义了延迟加载功能,就像这里描述的那样https://sap.github.io/spartacus-docs/customizing-cms- components/#lazy-loaded-cms-components-code-splitting某些组件的模块内部,这是一个示例: breadcrumb.module.ts 示例在这里 和构建之后,块在那里,从源选项卡也可见,但组件不是'不显示,并且由于缺少模块(例如 CommonModule、RouterModule,基本上是我们在自定义实现中使用的所有内容..)而出现错误,这些模块在相应的模块中声明但由于某种原因根本没有注册。
任何猜测我们应该修复什么以检查此功能是否在我们的架构中工作?
解决方案
我建议坚持“CMS 驱动的特性模块延迟加载”(如下所述:https ://sap.github.io/spartacus-docs/lazy-loading-guide/ ),而不是延迟加载单独的组件(使用component: () => import()
)因为让它工作更简单。
这个想法是在模块内定义 CMS 映射,然后将延迟加载(包含组件、服务等),而不是延迟加载单独的(和解耦的)组件。然后,在根应用程序中,我们让 Spartacus 知道,当我们要渲染指定的组件时,应该加载哪个功能模块(例如:https ://sap.github.io/spartacus-docs/lazy-loading-guide/#延迟加载模块的配置)
使用component: () => import()
只会延迟加载组件代码(没有模块,除非在同一个文件中定义),这样的组件将可以访问全局(根)服务等。在某些情况下它仍然有用,但让它工作有点问题不仅仅是基本场景(但这将在 Spartacus 3.x/4.0 中得到改进)。
关于你的问题:
- 是否可以延迟加载我们已经覆盖的组件,例如 BannerComponent、SearchBoxComponent ...?
- 是否可以在自定义 CMS 组件上应用延迟加载?
是的。
- 当此功能不起作用时是否有任何限制?也许与其他一些功能相结合?
如上所述。
推荐阅读
- javascript - 有条件地在悬停时添加伪类
- matlab - 如何在 Matlab 中识别 3D 网格之外的点
- dns - 具有相同子域但前缀不同的 Route53 托管区域
- android-layout - 构建失败。android布局的问题
- ios - 在哪里可以找到最小 ios 应用程序的模板?
- console - WSO2 - 限制对管理控制台的访问
- windows - 如何在任务计划程序中显示 powershell 运行屏幕?
- excel - 需要循环帮助
- maven - 我们可以使用 Maven 作为量角器的构建工具吗
- android - 为什么 layout_marginEnd 绑定失败但 layout_marginStart 绑定失败?