2020-04-16 Angular打包自定義依賴包

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.jsonpublic_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ò)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容