SAP Spartacus NgExpressEngineDecorator 的工作原理
首先看這個(gè) class 的 get 定義:
接收兩個(gè)輸入?yún)?shù),類型為:
- NgExpressEngine
- SsrOptimizationOptions
返回一個(gè)包裝后的 NgExpressEngine
NgExpressEngine 是 Spartacus 自己創(chuàng)建的類型,本質(zhì)是一個(gè)函數(shù),輸入?yún)?shù)為 NgSetupOptions,返回類型為 NgExpressEngineInstance.
后者又是一個(gè)函數(shù),作為 ExpressEngine 的執(zhí)行實(shí)例,接收 filePath,option 和 callback 作為參數(shù)。
一一對應(yīng):
返回一個(gè)新的函數(shù),接收 E 即標(biāo)準(zhǔn)的 NgExpressEngine 的輸入?yún)?shù)作為輸入?yún)?shù),同時(shí)將原來的兩個(gè)輸入?yún)?shù) NgExpressEngine 和 Spartacus optimization 值存儲起來:
稍后,在 server.ts 里,我們調(diào)用這個(gè)被包裝之后的 ngExpressEngine,此時(shí),輸入?yún)?shù)為一個(gè)對象,字段為 bootstrap,這個(gè)對象就是圖 E:NgSetupOptions
此時(shí),執(zhí)行函數(shù)體:
Object.assign() 方法用于將所有可枚舉屬性的值從一個(gè)或多個(gè)源對象分配到目標(biāo)對象。它將返回目標(biāo)對象。
調(diào)用 get 方法時(shí)傳入的值,通過閉包存儲在此:
三個(gè)點(diǎn),就是將若干對象的不同名字段進(jìn)行合并,最終結(jié)果:
其中閉包里的第一個(gè)輸入?yún)?shù),即是標(biāo)準(zhǔn)的 ngExpressEngine:
這里就是 Angular 標(biāo)準(zhǔn)的實(shí)現(xiàn)了,我們不操心:
注意返回的類型:
創(chuàng)建 OptimizationEngine 實(shí)例:
最后,返回一個(gè)新的函數(shù) renderResponse,且該函數(shù)執(zhí)行時(shí),執(zhí)行上下文為 OptimizedSsrEngine 本身:
從現(xiàn)在開始,this.engines 指向 Spartacus 自己的 renderResponse 函數(shù)了:
更多Jerry的原創(chuàng)文章,盡在:“汪子熙”:
總結(jié)
以上是生活随笔為你收集整理的SAP Spartacus NgExpressEngineDecorator 的工作原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新能源汽车4月狂卖60万辆 今年纯燃油新
- 下一篇: SAP 电商云 Spartacus UI