NPM如何管理依賴包版本?

2021-10-03 16:26:15 字數 3048 閱讀 5336

這是conardli的第 69 篇原創,謝謝你的支援!

nodejs成功離不開npm優秀的依賴管理系統。在介紹整個依賴系統之前,必須要了解npm如何管理依賴包的版本,本文將介紹npm包的版本發布規範以、何管理各種依賴包的版本以及一些關於包版本的最佳實踐。

重新上傳

取消你可以執行npm view package version檢視某個package的最新版本。

執行npm view conard versions檢視某個package在npm伺服器上所有發布過的版本。

重新上傳

取消執行npm ls可檢視當前倉庫依賴樹上所有包的版本資訊。

重新上傳

取消npm包中的模組版本都需要遵循semver規範——由github起草的乙個具有指導意義的,統一的版本號表示規則。實際上就是semantic version(語義化版本)的縮寫。

semver規範官網:

semver規範的標準版本號採用x.y.z的格式,其中 x、y 和 z 為非負的整數,且禁止在數字前方補零。x 是主版本號、y 是次版本號、而 z 為修訂號。每個元素必須以數值來遞增。

例如:1.9.1 -> 1.10.0 -> 1.11.0

當某個版本改動比較大、並非穩定而且可能無法滿足預期的相容性需求時,你可能要先發布乙個先行版本。

先行版本號可以加到「主版本號.次版本號.修訂號」的後面,先加上乙個連線號再加上一連串以句點分隔的識別符號和版本編譯資訊。

下面我們來看看react的歷史版本:

重新上傳

取消可見是嚴格按照semver規範來發版的:

在修改npm包某些功能後通常需要發布乙個新的版本,我們通常的做法是直接去修改package.json到指定版本。如果操作失誤,很容易造成版本號混亂,我們可以借助符合semver規範的命令來完成這一操作:

在開發中肯定少不了對一些版本號的操作,如果這些版本號符合semver規範 ,我們可以借助用於操作版本的npm包semver來幫助我們進行比較版本大小、提取版本資訊等操作。

npm 也使用了該工具來處理版本相關的工作。

npm install semver
semver.gt('1.2.3', '9.8.7') // false

semver.lt('1.2.3', '9.8.7') // true

semver.valid('1.2.3') // '1.2.3'

semver.valid('a.b.c') // null

semver.valid(semver.coerce('v2')) // '2.0.0'

semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7'

semver.clean('  =v1.2.3   ') // '1.2.3'

semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true

semver.minversion('>=1.0.0') // '1.0.0'

我們經常看到,在package.json中各種依賴的不同寫法:

"dependencies":
前面三個很容易理解:

再來看看後面兩個,版本號中引用了~^符號:

package.json檔案中最常見的應該是"yargs": "^14.0.0"這種格式的 依賴, 因為我們在使用npm install package安裝包時,npm預設安裝當前最新版本,然後在所安裝的版本號前加^號。

注意,當主版本號為0的情況,會被認為是乙個不穩定版本,情況與上面不同:

1.0.0 的版本號用於界定公共 api。當你的軟體發布到了正式環境,或者有穩定的api時,就可以發布1.0.0版本了。所以,當你決定對外部發布乙個正式版本的npm包時,把它的版本標為1.0.0。

實際開發中,經常會因為各種依賴不一致而產生奇怪的問題,或者在某些場景下,我們不希望依賴被更新,建議在開發中使用package-lock.json

鎖定依賴版本意味著在我們不手動執行更新的情況下,每次安裝依賴都會安裝固定版本。保證整個團隊使用版本號一致的依賴。

每次安裝固定版本,無需計算依賴版本範圍,大部分場景下能大大加速依賴安裝時間。

使用 package-lock.json 要確保npm的版本在5.6以上,因為在5.0 - 5.6中間,對 package-lock.json的處理邏輯進行過幾次更新,5.6版本後處理邏輯逐漸穩定。

關於package-lock.json詳細的結構,我們會在後面的章節進行解析。

我們的目的是保證團隊中使用的依賴一致或者穩定,而不是永遠不去更新這些依賴。實際開發場景下,我們雖然不需要每次都去安裝新的版本,仍然需要定時去公升級依賴版本,來讓我們享受依賴包公升級帶來的問題修復、效能提公升、新特性更新。

重新上傳

取消使用npm outdated可以幫助我們列出有哪些還沒有公升級到最新版本的依賴:

執行npm update會公升級所有的紅色依賴。

yarn降版本 npm依賴版本鎖定和管理

如果你也是使用vue可能需要注意以下依賴 vue loader 9.9.5 vue style loader 1.0.0 vue 2.1.8 vue template compiler 2.1.8 針對這種依賴公升級解決方法 只發布編譯後的檔案 這樣測試同學就無需關心,公升級依賴後再重新打包發布。優...

npm依賴管理 冗餘,依賴樹

npm的依賴樹查詢 原理都是查詢檔案夾node modules的結構。比如mac的node modules位置在 usr local lib下。具體專案的node modules位置位於專案根目錄下。1 檢視npmjs上某個外掛程式的依賴情況 2 檢視某個專案的外掛程式依賴情況 3 檢視本地計算機上...

npm 03 鎖定依賴包的版本號

上次去客戶公司交接專案源 時,出現安裝依賴後,啟動失敗的問題,最後找到原因是有乙個依賴包更新了大版本,導致兩個檔案找不到。所以客戶要求我們要鎖定依賴包的版本號,保證專案在以後的任何時間都正常執行。第一種 使用npm shrinkwrap命令 第二種 使用package.lock.json檔案來控制版...