麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

Node.js中package.json中庫的版本號(~和^)

2019-11-19 11:54:27
字體:
來源:轉載
供稿:網友

~和^的區別

最近總是碰到一些問題, 在本地好好的, 在線上就出現了問題, 本地也一直復現不了, 后來把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, 則不會自動升級

'~'(波浪符號):他會更新到當前minor version(也就是中間的那位數字)中最新的版本。放到我們的例子中就是:"exif-js": "~2.3.0",這個庫會去匹配更新到2.3.x的最新版本,如果出了一個新的版本為2.4.0,則不會自動升級。波浪符號是曾經npm安裝時候的默認符號,現在已經變為了插入符號。
'^'(插入符號): 這個符號就顯得非常的靈活了,他將會把當前庫的版本更新到當前major version(也就是第一位數字)中最新的版本。放到我們的例子中就是:"vue": "^2.2.2", 這個庫會去匹配2.x.x中最新的版本,但是他不會自動更新到3.0.0。

可以參考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 xxxnpm rm xxxnpm 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, 能解決包版本不一致的情況

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 最新av在线免费观看 | 污黄视频在线播放 | 一级一级一级一级毛片 | 成年人黄视频 | 亚洲视频成人 | 久久千人斩| 欧美一级黑人 | 狠狠干91 | 欧美一区二区黄色 | 成年人国产视频 | 黄色免费小网站 | 曰批全过程40分钟免费视频多人 | 精品69人人人人 | 免费观看一区二区三区 | 国产午夜亚洲精品理论片大丰影院 | 天天躁狠狠躁夜躁2020挡不住 | 少妇一级淫片免费放正片 | 一级毛片电影网 | 久久久看| 精品国产一区二区三区四区阿崩 | 午夜在线小视频 | 斗罗破苍穹在线观看免费完整观看 | 国产中文av在线 | 精品久久久久久久久久中文字幕 | 叉逼视频 | 久精品久久 | 日韩视频―中文字幕 | 午夜精品久久久久久久久久久久久蜜桃 | 国产午夜精品一区二区三区免费 | chinesehdxxxx无套 久久另类视频 | 免费在线国产 | 国产精品视频一区二区三区四区国 | 91 在线免费观看 | 久久国产精品成人免费网站 | 久草在线最新 | av手机在线免费播放 | 欧美成人精品不卡视频在线观看 | 一区二区三区日韩在线 | 欧美精品日日鲁夜夜添 | 欧美18—19sex性护士中国 | 一级电影在线观看 |