首頁  >  文章  >  web前端  >  Node.js中package.json中庫的版本號的介紹

Node.js中package.json中庫的版本號的介紹

不言
不言轉載
2019-04-02 10:15:561855瀏覽

這篇文章帶給大家的內容是關於Node.js中package.json中庫的版本號的介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

~和^的區別

最近總是碰到一些問題, 在本地好好的, 在線上就出現了問題, 本地也一直復現不了,後來把node_modules目錄刪除了之後, 重新安裝, 就在本地復現了這個問題,可以看了git history, 並沒有人修改package.json中的版本號,於是認真的了解了一下package.json中庫的版本號;

~和^的區別

    "babel-loader": "^7.1.1",
    "body-parser": "~1.15.2"

npm install --save xxx, 會優先考慮使用^而不是~

#以版本號x.y.z為例
x:主版本號, 當你做了不相容的API修改
y:次版本號, 當你做了向下相容的功能性問題
z:修訂號, 當你做了向下相容的問題修復

~x.y.z, 會更新到y最新的版本, 例如body-parser: ~1.15.2, 這個函式庫會去匹配到1.15.z的最新版本, 如果出現了1.16.0, 則不會自動升級
^x.y.z, 會更新到x的最新版本,例如babel-loader: ^7.1.1, 這個函式庫會去符合7.y.z的最新版本, 如果出現了8.1.1, 則不會自動升級

可以參考npm官方給出的解釋
^1.2.3 := >=1.2.3 <2.0.0
^0.2.3 := >=0.2.3 <0.3.0
^0.0. 3 := >=0.0.3 <0.0.4

大多數情況下遵循這種版本號規則的依賴包都沒問題, 但是npm是開源的世界, 並不是所有的都嚴格遵循這個規則, 所以會出現上述的問題;

為什麼需要package鎖定

有以下幾個可能原因, 在某些情況下, package.json是無法保證每個人自己電腦上執行的npm install 後安裝的依賴版本都是一樣的
1.如果package.json中記錄的依賴包的版本是一個版本範圍, 一旦執行npm i 會導致這個包更新到最新版本
2.就算你依賴了一個固定版本的套件(如A 1.1.1), 但你依賴的套件A可能依賴其他的套件B,而A在聲明依賴時可能也使用了semser命名, 如^1.2.3, 如果套件B release 了新版, 也會導致套件B會安裝到更新版本
3.不同人使用的npm程式的版本不同

如果依賴套件的版本不一致, 會導致開發環境和生產環境產品不一致的行為; 或導致不同團隊成員之前也產品環境差異

#如何解決套件版本不一致的情況

1 .npm 使用package-lock.json檔案來解決這個問題

執行npm install會自動產生package.json檔案, 只要執行普通的安裝, 更新等可能會修改package.json的npm指令, 都會自動同步修改package-lock.json檔案

npm install xxx
npm rm xxx
npm update xxx

2.npm 也支援npm-shrinkwrap.json, 和package-lock.json功能完全一樣

執行npm shrinkwrap#來產生npm-shrinkwrap.json
此指令將根據package-lock.json 檔案建立一個新的或覆蓋現有的npm-shrinkwrap.json 檔案。此命令建立和更新的檔案將優先於任何其他現有或將有的 package-lock.json 檔案。

3.使用yarn

使用yarn主要有一下優點

  • 快速: 會快取它下載的每個包,而無需重複下載;並行化操作以最大資源利用率
  • 可靠:使用格式詳盡而又簡潔的lockfile檔案和確定性演算法來安裝依賴,能夠保證在一個系統上的運行的安裝過程也會以同樣的方式運行在其他系統上。
  • 安全: 安裝套件被執行前校驗其完整性
yarn速度比npm快一些, yarn的鎖定檔案是yarn.lock, 能解決套件版本不一致的情況

【相關推薦:JavaScript影片教學

#

以上是Node.js中package.json中庫的版本號的介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除