當我們查看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