一些关于 SAP Spartacus 组件和模块延迟加载的问题和解答
回答:組件延遲加載有效,但是在更復雜的組件(使用不同的指令和組件)的情況下更加困難,因為動態導入僅針對組件類 Component class,而不是 Angular 模塊。如果這些組件類中使用到的指令和其他組件并沒有被加載,則運行時會報各種錯誤。
這些復雜情況的一種解決方法是將模塊(module definition)定義嵌入到與組件本身相同的文件,即在 Component 實現文件里,再定義一遍模塊。因此模塊將與組件一起加載。
回答:它目前在 Angular 框架中不是開箱即用的。 默認情況下,Angular 支持路由延遲加載,對于像 Spartacus 這樣的 CMS 驅動的站點,我們不能使用基于路由的方式來延遲加載一個 Angular 組件,因為我們在構建時不知道指定路由需要哪些組件。
這就是 Spartacus 利用 CMS 映射作為支持延遲加載的機制的原因。 簡而言之,我們可以得到一個提示(在導航到它時)指定頁面需要哪些組件,然后使用 CMS 映射配置,延遲加載所需的組件或功能。
回答:如果您動態(惰性)和靜態地導入一個入口點,那么構建器(webpack)將使其靜態捆綁。 這是一個常見的情況,為什么延遲加載可能不起作用,在某種程度上,應用程序應該仍然可以工作,如果配置正確,代碼拆分機制將不會對這段代碼起作用,并且不會生成單獨的 JS 塊。
但是,靜態導入可以在單獨的延遲加載模塊之間共享。如果這些導入僅在延遲加載的模塊之間共享,則將創建特殊的共享塊,它將加載兩個功能。 如果導入也與直接在主塊(app.module)中導入的某些組件或模塊共享,那么代碼將被靜態捆綁到主塊中。
回答:很難從這個描述中猜測潛在的問題。 一般來說,如果延遲加載不起作用,最好的辦法是一步一步地做,從很少的組件開始,并識別潛在的問題。 即便如此,仍然會有部分代碼需要立即加載,例如應用程序初始化程序、http 攔截器等。
從 Spartacus 3.0 開始,我們開始發布帶有默認延遲加載功能的整個庫。所有新功能都是以這種方式創建的 + 我們正在繼續移動現有功能,同時改進機制和技術(但仍然是相同的機制)。
總結
以上是生活随笔為你收集整理的一些关于 SAP Spartacus 组件和模块延迟加载的问题和解答的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 京东申请注册Chat相关商标
- 下一篇: RouterModule.forRoot