ng-packagr的npm地址:https://www.npmjs.com/package/ng-packagr
git地址:https://github.com/ng-packagr/ng-packagr
第一步:在你需要打成包得項(xiàng)目下安裝ng-packagr
yarn add ng-packagr --dev | -D
npm i ng-packagr --save-dev | -D
第二步:添加打包配置屬性
在項(xiàng)目得根目錄下添加兩個(gè)文件ng-package.json 和 public_api.ts,注意:兩個(gè)文件必須處于同級(jí)目錄。
第三步:編寫打包入口文件public_api.ts,所有希望在外部引用的對(duì)象,都需要在此文件中明確輸出。
export * from './src/app/modules/header/header.module'
第四步:編寫 ng-package.json
{
"$schema": "./node_modules/ng-packagr/ng-package.schema.json",
"lib": {
"entryFile": "public_api.ts"
},
"whitelistedNonPeerDependencies": [
"."
]
}
1.為打包時(shí),依賴項(xiàng)聲明為peerDependencies,發(fā)布帶有dependencies部分的npm軟件包package.json很容易導(dǎo)致將依賴關(guān)系的多個(gè)版本安裝到應(yīng)用程序的node_modules文件夾中。盡管這是服務(wù)器端或獨(dú)立程序上理想的解決方案,但它是前端構(gòu)建堆棧和UI技術(shù)中的錯(cuò)誤的來源-您不想安裝兩個(gè)不同版本的Angular或RxJS。
為了減輕使用意外發(fā)布庫的風(fēng)險(xiǎn)dependencies,ng-packagr dependencies在構(gòu)建時(shí)進(jìn)行驗(yàn)證。如果沒有明確將依賴項(xiàng)列入白名單,它將使構(gòu)建失敗。這是確保Angular庫生態(tài)系統(tǒng)健康的安全網(wǎng)。
2.如果你要打包得項(xiàng)目dependences下有依賴包,可以使用whitelistedNonPeerDependenciesng-packagr配置中的選項(xiàng)將其列入白名單。每個(gè)條目都將作為RegExp進(jìn)行匹配。在ng-package.json添加如下屬性
whitelistedNonPeerDependencies": [ "."]
第五步:在package.json文件中添加packagr腳本命令,并將private屬性設(shè)置為false:并添加命令
"scripts": {
.....
"packagr": "ng-packagr -p ng-package.json"
},
"private": false,
第六步:執(zhí)行打包命令
yarn ngpack
結(jié)束后會(huì)生成一個(gè)dist文件夾,就是我們需要的library包了。還可以進(jìn)一步將dist打包成tgz文件:
cd dist
npm pack
dist文件夾里就會(huì)多出一個(gè)ng-packagr-test-v0.0.0.tgz ,名稱和版本號(hào)均取自package.json。
這下你可以在本地其他項(xiàng)目里調(diào)用打包好的自定義包,進(jìn)行測(cè)試,在其他項(xiàng)目里執(zhí)行
yarn add ../../ng-packagr-test/dist/ng-packagr-test-v0.0.0.tgz -D//相對(duì)路徑
安裝好后就可以向其他組件一樣在項(xiàng)目里調(diào)用了,例如,在AppModule里引入模塊:
....
import { HeaderModule } from 'ng-packagr-test';
@NgModule({
declarations: [
AppComponent
],
imports: [
...
HeaderModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
然后在app.component.html里即可引用header組件:
<app-header>Such Header</app-header>
第七步:通過自己的npm賬號(hào)發(fā)布到npmjs
1.如果你還沒有npm 賬號(hào),請(qǐng)先去npm官網(wǎng)注冊(cè),注冊(cè)地址https://www.npmjs.com/
2.有賬號(hào)后,執(zhí)行 npm login,按照提示輸入用戶名,郵箱等
3.執(zhí)行發(fā)布命令 npm publish ,發(fā)布成功后,可以登錄https://www.npmjs.com/查看自己發(fā)布的項(xiàng)目
發(fā)布得時(shí)候一定要注意發(fā)布包得版本號(hào)在npm上不重復(fù),要不然會(huì)報(bào)錯(cuò)