SAP 电商云 Spartacus UI 模块延迟加载的入口程序

该入口位于下图第 218 行的 rxjs from Operator 调用:

SAP 电商云 Spartacus UI 模块延迟加载的入口程序_第1张图片

这里我们将一个函数传入 from:

SAP 电商云 Spartacus UI 模块延迟加载的入口程序_第2张图片

传入的具体函数如下:

SAP 电商云 Spartacus UI 模块延迟加载的入口程序_第3张图片

这个函数返回一个 promise,该类型作为 from 操作符的输入类型。这个函数维护在 featureConfig json 对象的 module 字段里:

SAP 电商云 Spartacus UI 模块延迟加载的入口程序_第4张图片

这个 json 对象是 Spartacus 代码里通过 provideConfig 注入到配置对象 config 中的,字段名称为 featureModules:

SAP 电商云 Spartacus UI 模块延迟加载的入口程序_第5张图片

这里会触发 chunk 加载?

SAP 电商云 Spartacus UI 模块延迟加载的入口程序_第6张图片

从下图可以确认,确实上图19行 import 指令,会触发 spartacus/cart/quick/order chunk 的加载:

SAP 电商云 Spartacus UI 模块延迟加载的入口程序_第7张图片

第19行 import 语句执行完之后,使用 then 返回加载成功的 QuickOrderModule 定义,这体现了 Promise 的语义。

SAP 电商云 Spartacus UI 模块延迟加载的入口程序_第8张图片

所以当代码执行到下图第 220 行 switchMap 时,传入的 module 就是加载成功的 QuickOrderModule 类:

SAP 电商云 Spartacus UI 模块延迟加载的入口程序_第9张图片

这里还使用了 EventService 来抛出延迟加载 chunk 成功加载的事件:ModuleInitializedEvent

SAP 电商云 Spartacus UI 模块延迟加载的入口程序_第10张图片

更多Jerry的原创文章,尽在:"汪子熙":

你可能感兴趣的:(SAP 电商云 Spartacus UI 模块延迟加载的入口程序)