前序:
你可以创建和发布新库来扩展 Angular 的功能。如果你发现需要在多个应用中解决同样的问题(或者想与其他开发者共享你的解决方案),你就有了一个潜在的库。
####创建库
- 使用 Angular CLI,用以下命令生成一个新库的骨架
ng generate library my-lib
复制代码
2.此时在你的工作区中创建 projects/my-lib 文件夹,里面包含 NgModule 中的一个组件和一个服务。该工作区的配置文件 angular.json 中也添加了一个 'library' 类型的项目。
"projects": {
...
"my-lib": {
"root": "projects/my-lib",
"sourceRoot": "projects/my-lib/src",
"projectType": "library",
"prefix": "lib",
"architect": {
"build": {
"builder": "@angular-devkit/build-ng-packagr:build",
...
复制代码
3.使用 CLI 命令来构建、测试和 lint 这个项目
ng build my-lib
ng test my-lib
ng lint my-lib
复制代码
注意:
该项目配置的构建器与应用类项目的默认构建器不同。此构建器可以确保库永远使用 AoT 编译器构建,而不必再指定
--prod
标志。 要让库代码可以复用,你必须为它定义一个公共的 API。这个“用户层”定义了库中消费者的可用内容。该库的用户应该可以通过单个的导入路径来访问公共功能(如NgModules、服务提供商和工具函数)。
库的公共 API 是在库文件夹下的 public-api.ts 文件中维护的。当你的库被导入应用时,从该文件导出的所有内容都会公开。请使用 NgModule 来暴露这些服务和组件。
你的库里应该提供一些文档(通常是 README 文件)来指导别人安装和维护。 ####与 CLI 集成 库中可以包含那些能与 Angular CLI 集成的 schematics 。
- 包含一个安装型 schematic,以便
ng add
可以把你的库添加到项目中。 - 包含一些生成型 schematic ,以便
ng generate
可以为项目中的已定义工件(组件,服务,测试等)生成脚手架。 - 包含一个更新(update)原理图 ,以便
ng [update](https://www.angular.cn/api/forms/NgModel#update)
可以更新此库的依赖,并针对新版本中的破坏性变更提供辅助迁移。
要了解更多信息,参见 原理图概览 和 供库使用的原理图。 ####发布你的库
使用 Angular CLI 和 npm 包管理器来把你的库构建并发布成 npm 包。默认情况下,库是在 AoT模式 下构建的,因此在构建发布时你不需要指定
-prod
标志。
ng build my-lib
cd dist/my-lib
npm publish
复制代码
如果你之前从未在 npm 中发布过包,就必须创建一个用户帐号。点此阅读发布 npm 包的更多信息。 ####在应用中使用自己的库 你不必把库发布到 npm 包管理器上就可以在自己的应用中使用它,但必须先构建它。 要想在应用中使用你自己的库:
- 构建该库。在构建之前,无法使用库。
content_copy
ng build my-lib
复制代码
- 在你的应用中,按名字从库中导入:
content_copy
import { myExport } from 'my-lib';
复制代码