前言
最近遇到一個問題,我們公司自己內(nèi)部開發(fā)了多個npm私有包,包之間有依賴關(guān)系,例如A依賴B。當(dāng)B發(fā)現(xiàn)有BUG需要修復(fù)的時候,災(zāi)難來了。
我們需要先在B中修復(fù)問題,然后publish。接著在更新A的package.json中B的版本號,然后要下載B的最新版。而且在開發(fā)初始,這種情況非常頻繁,而且版本號是蹭蹭往上漲。簡直要瘋掉~~~
分析需求
- (1)我希望B包publish之后,A包中B會自動更新為最新版本。
- (2)我希望有一個內(nèi)部開發(fā)的版本(alpha),他和主版本(stable)可以并行存在。并且開發(fā)的版本經(jīng)過測試驗(yàn)收完成之后,我們可以切換最新的alpha為stable
解決問題
- 問題1的解決辦法
baidu,google之后。發(fā)現(xiàn)有一個叫npm link的命令。他可以創(chuàng)建一個軟鏈接來解決這個問題。舉個栗子:
// 我們有一個名為base的package,先將路徑切換到base的目錄下。
cd base
// 執(zhí)行npm link之后,會將base復(fù)制到全局模塊中(就像執(zhí)行了npm i base -g一樣)
npm link
// 我們有另外一個名為act的package,將路徑切換到act的目錄下。
cd act
// 通過npm link base命令,act依賴的base包會形成一個鏈接指向全局模塊中的的base
npm link base
之后B中的代碼有變更,publish之后,A會自動更新B為最新版本。他們之間的指向關(guān)系為A->global->B。問題1解決完畢。
- 問題2的解決辦法
baidu,google之后,發(fā)現(xiàn)npm有兩個命令。version和tag,兩個組合使用可以解決第二個問題。舉個栗子:
// (1)重點(diǎn):此處注意。必須先刪除package-lock.json文件
rm -f package-lock.json
// (2)發(fā)現(xiàn)B有個BUG,需要解決,解決完畢,并且提交git之后。執(zhí)行如下命令,會創(chuàng)建一個n.n.n-n的version(例如0.1.5-5)
npm version prerelease
// (3)通過tag命令,我們可以創(chuàng)建一個和latest并行的測試版本,兩者可以互相獨(dú)立。
npm publish --tag alpha
// 簡單操作方法:可以在package.json中創(chuàng)建npm命令,將修改的代碼提交到git之后,執(zhí)行執(zhí)行此npm script就可以了。
"scripts": {
"beta": "rm -f package-lock.json && npm version prerelease && npm publish --tag beta"
}
問題2順利解決。測試驗(yàn)收完畢,要上線的時候。我們將leatest的version改變下就行了。如下:
npm dist-tag add base@0.1.4 lastest
總結(jié)
將問題1和問題2的解決方案組合起來,就可以解決我遇到的問題了。完美~