1. 程式人生 > >Node.js中package.json中庫的版本號詳解(^和~區別)

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

當我們檢視package.json中已安裝的庫的時候,會發現他們的版本號之前都會加一個符號,有的是插入符號(^),有的是波浪符號(~)。那麼他們到底有什麼區別呢?先貼一個例子,對照例子來做解釋:

"dependencies": {
"bluebird": "^3.3.4",
"body-parser": "~1.15.2"
}

bluebird的版本號:^3.3.4
body-parse的版本號:~1.15.2

 

當我們使用最新的Node執行‘npm instal --save xxx',的時候,他會優先考慮使用插入符號(^)而不是波浪符號(~)了。

這對於你來說意味這什麼呢?首先我們需要理解這兩者(~和^)的區別。

波浪符號(~):他會更新到當前minor version(也就是中間的那位數字)中最新的版本。放到我們的例子中就是:body-parser:~1.15.2,這個庫會去匹配更新到1.15.x的最新版本,如果出了一個新的版本為1.16.0,則不會自動升級。波浪符號是曾經npm安裝時候的預設符號,現在已經變為了插入符號。

插入符號(^):這個符號就顯得非常的靈活了,他將會把當前庫的版本更新到當前major version(也就是第一位數字)中最新的版本。放到我們的例子中就是:bluebird:^3.3.4,這個庫會去匹配3.x.x中最新的版本,但是他不會自動更新到4.0.0。

總結一下:

~1.15.2 :=  >=1.15.2 <1.16.0     

^3.3.4 := >=3.3.4 <4.0.0

 

最後解釋下之前提到的minor verision和major version:

1.15.2對應就是MAJOR,MINOR.PATCH:1是marjor version;15是minor version;2是patch version。

MAJOR:這個版本號變化了表示有了一個不可以和上個版本相容的大更改。

MINOR:這個版本號變化了表示有了增加了新的功能,並且可以向後相容。

PATCH:這個版本號變化了表示修復了bug,並且可以向後相容。

因為major version變化表示可能會影響之前版本的相容性,所以無論是波浪符號還是插入符號都不會自動去修改major version,因為這可能導致程式crush,可能需要手動修改程式碼。

轉自:https://blog.csdn.net/njweiyukun/article/details/70309066

官方詳解:https://docs.npmjs.com/misc/semver#advanced-range-syntax