乐趣区

关于sap:SAP-电商云-Spartacus-UI-支持延迟加载的新功能的入口设计

假如咱们要为 Spartacus UI 开发一个新性能,首先,这个新性能,应该放到 feature library 文件夹里:

这个新性能的入口,搁置到 Feature Module 中。

新性能通过 public_api.ts 将私有性能裸露给内部消费者。后者从 index.ts 里导入,而 index.ts 又导入 quick-order.module.ts 中的内容。

QuickOrderModule 导入 CoreModule 和 ComponentsModule,二者都是重量级 module,须要反对提早加载。

ng-package.json 文件里,定义了该新性能的入口文件 entryFile 为 public_api.ts:

留神,在根目录 angular.json 里,咱们找不到和 quick order 相干的实现,这阐明 Quick Order 并不是一个独立的 library?

这里阐明 quick order 是 cart library 的一部分:

从这里的文件夹层级构造也能说的通:

对于 QuickOrder 这个新性能来说,其入口并不是咱们上图看到的 QuickOrderModule,而是下图所示的 QuickOrderFeatureModule,后者蕴含了一个轻量级的 QuickOrderRootModule 实现,而上图看到的重量级实现 QuickOrderModule,通过提早加载的形式,在下图代码第 20 行导入零碎。

Root 文件夹里的 QuickOrderRootModule 是一个十分轻量级的实现:

仅仅蕴含了路由设置和 CMS Component 映射关系的保护。

Facade 层通过 index.ts 导出:

而后 public_api.ts 导出 index.ts 的全部内容:

为什么要设计这个 public_api.ts 呢?为了让语义更加分明。这个最佳实际定义在此处。

  • public_api.ts 旨在枚举和公开特定性能以供内部应用。* index.ts 旨在作为默认导出机制来弃用绝对路径导入。

更具体的探讨:

(1) 消歧:鉴于短少“外部”修饰符和外部模块减少的复杂性,须要多个 index.ts 桶文件来提供不同的外部 / 内部 API 外表。

(2) Angular CLI 面向用户的工具:为了提供省力的工具默认值,须要一个公共 API 文件规范。NG 编译器所做的不仅仅是将所有 TypeScript 构建为 JavaScript;值得注意的是,它还会依据抉择的入口点进行摇树。出于其余起因,index.ts 是默认的蹩脚抉择。

(3) Angular 外部代码品质:public-api 是与 Angular 消费者的契约,必须严格控制,随同着文档变动、新测试、兼容性评估和布告的变动。为此,我的项目设置会主动回绝导致 public-api 更改的代码更改。

(4) 意识 / 清晰度 / 用意:我认为这通常是其余评论所暗示的。历史上,人们始终在应用 index.ts 来解决外部和内部的所有事件。当然,一个我的项目只能将 index.ts 用于公共 API 签名,但这并不显著。

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

退出移动版