关于javascript:Angular-Public-API-接口设计

5次阅读

共计 1597 个字符,预计需要花费 4 分钟才能阅读完成。

依照 Angular 官网 Github repo 的定义,Angular 的 semver、定时公布周期和弃用政策目前实用于这些 npm 包:

  • @angular/animations
  • @angular/core
  • @angular/common
  • @angular/elements
  • @angular/forms
  • @angular/platform-browser
  • @angular/platform-browser-dynamic
  • @angular/platform-server
  • @angular/upgrade
  • @angular/router
  • @angular/service-worker

此列表中无意省略的一个是 @angular/compiler,它目前被认为是低级 api,可能会进行外部更改。这些更改不会影响应用更高级别 api(命令行界面或通过 @angular/platform-browser-dynamic 进行 JIT 编译)的任何应用程序或库。只有十分具体的用例须要间接拜访编译器 API(次要是 IDE、linter 等的工具集成)。

包 @angular/bazel 目前是一个 Angular Labs 我的项目,不在公共 API 保障范畴内。

此外,仅涵盖了 @angular/compiler-cli 的命令行应用(不是间接应用 API)。

Angular 团队开发的其余我的项目,如 angular-cli、Angular Material,未来随着它们的成熟,将蕴含在这些或相似的保障中。

在反对的软件包中,Angular 提供以下保障:

(1) 通过主入口点(例如 @angular/core)和测试入口点(例如 @angular/core/testing)导出的符号。这实用于运行时 JavaScript 值和 TypeScript 类型。

(2) 通过全局命名空间 ng 导出的符号(例如 ng.core)

(3) 位于 npm 包的 bundles/ 目录中的包(例如 @angular/core/bundles/core.umd.js)

以下 并非 Angular public API surface:

(1) 咱们包中的任何文件 / 导入门路,除了 /、/testing 和 /bundles/* 以及其余记录的包入口点。
(2) 可注入类(服务和指令)的构造函数 – 请应用 DI 获取这些类的实例
(3) 任何标记为公有的类成员或符号,或以下划线 (_)、禁止拉丁语 o (ɵ) 和双禁止拉丁语 o (ɵɵ) 为前缀。
(4) 扩大咱们的任何类,除非 API 文档中专门记录了对此的反对
(5) Angular 编译器生成的代码的内容和 API 外表(有一个显著的例外:保障从生成的代码导出的 NgModuleFactory 实例的存在和名称)

Angular peer dependencies(例如 TypeScript、Zone.js 或 RxJS)不被视为 Angular API 外表的一部分,但它们蕴含在咱们的 SemVer 政策中。如果更新不会对 Angular 应用程序造成重大更改,咱们可能会在主要版本中更新任何这些依赖项的所需版本。导致重大破坏性更改的对等依赖项更新必须推延到次要的 Angular 版本。

Extending Angular classes

除非在 API 文档中明确阐明,否则 Angular 公共 API 中的所有类都是 final 的(不应扩大它们)。

不反对扩大此类最终类,因为受爱护的成员和外部实现可能会在次要版本之外发生变化。

Golden files

Angular 在黄金文件中跟踪公共 API 的状态,该文件由一个称为公共 API 防护的工具保护。如果您在受反对的公共包之一中批改公共 API 的任何局部,则 PR 可能无奈通过 CI 中的测试并显示一条谬误音讯,批示您承受黄金文件。

公共 API 守卫提供了一个 Bazel 指标,用于更新给定包的以后状态。如果您以任何形式增加或批改公共 API,您必须应用 yarn 在您抉择的终端 shell 中执行 Bazel 指标(举荐应用最新版本的 bash)。

正文完
 0