假如咱们要为 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 的原创文章,尽在:” 汪子熙 ”: