前言
有了前面的过程,我们引入了 ng-packagr。先看一下好处,官方的:Transpile your libraries to Angular Package Format。我们现在要开发angular格式的包了。 至于特色功能,这里就不说了,ng-packagr上有详细说明。
开始使用
现在是要开发独立的windora项目了,这个项目作为依赖,以后特色功能进入到子项目,独立发布,独立安装使用,独立测试。 前面的文章我们少了一个部分,那就是Angular Package Format.这里有很多提议,所以,为了发布我们的包,最好也是参考提议进行开发。
-
改变主意了,我们的包命名空间为@windora
为什么要这么做呢,考虑到以后会有很多的包发布,就把@windora作为命名空间了。就像@angular/core、@angular/common一样。
-
开始新的组件库
我们基于angular-cli进行开发。
- 新建一个项目
ng new windora
- 创建我们的组件库 从angular-cli v6开始,已经内置了ng-packagr,即 @angular-devkit/build-ng-packagr:build ,只需要在项目根路径下执行下面命令就可以快速生成一个库
ng g library hello
虽然上面的命令很好用,但是生成的内容还是过多了,于是我决定手动创建一个。
cd windora
mkdir libs && cd libs
mkdir pan
mkdir utils
libs 将会是我们组件库存放的地方,我们将会把UI相关的组件放到 pan 下面,为什么呢,因为我们把pandora的pan拿掉了。可是在这篇文章里我们只写utils。我们的目标是什么呢,以后的工具都可以用下面的方式使用
npm i @windora/utils
import {xxxModule} from '@windora/utils';
@Component({
imports:[
xxxModule
]
})
export class someModule
-
有了上面的目录结构,我们现在对目录作一些初始工作
创建测试文件以及测试需要的配置文件 karma.conf.js tsconfig.spec.json test.ts polyfills.ts tsconfig.libs.json(供组件库使用) 这些文件主要供测试使用,因为要开发组件库,单元测试少不了。除此之外,需要在根下的angular.json稍微调整下,在projects下增加配置,以便我们可以使用测试
{
"projects":{
"libs": {
"projectType": "library",
"root": "libs",
"architect": {
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"polyfills": "libs/polyfills.ts",
"main": "libs/test.ts",
"karmaConfig": "libs/karma.conf.js",
"tsConfig": "libs/tsconfig.libs.json"
}
}
},
"prefix": ""
}
}
}
给根目录下的package.json添加测试脚本
{
"test-libs":"ng test libs"
}
- 基本的配置算是完成了,进入开发主题,创建我们第一个util,先开发一个复制工具,就写为copy
cd utils mkdir copy npm init
通过上面的操作,我们在utils下初始化一个包,写好我们的信息,就可以了 同时,在copy目录下,也建立一个package.json,不过这个文字比较简单,用于创建一个子的入口
{
"ngPackage":{
"lib":{}
}
}
一初准备就绪,像开发一般angular组件一样,编写一个copyService。摔下来就是本地使用和发布了。切换到dist下,然后 执行 npm pack 生成 windora-utils-1.0.0.tgz 然后在引用的地方加上
npm i /path/to/just/now/packed/xxx.tgz