當(dāng)我們查看package.json中已安裝的庫的時候福铅,會發(fā)現(xiàn)他們的版本號之前都會加一個符號弟胀,有的是插入符號^
,有的是波浪符號~
眉厨。那么他們到底有什么區(qū)別呢锌奴?
"dependencies": {
"bluebird": "^3.3.4",
"body-parser": "~1.15.2"
}
波浪符號(~):它會更新到當(dāng)前minor version(也就是中間的那位數(shù)字)中最新的版本。放到我們的例子中就是:body-parser:~1.15.2
憾股,這個庫會去匹配更新到1.15.x
的最新版本鹿蜀,如果出了一個新的版本為1.16.0
,則不會自動升級服球。波浪符號是曾經(jīng)npm安裝時候的默認(rèn)符號茴恰,現(xiàn)在已經(jīng)變?yōu)榱瞬迦敕枴?/p>
插入符號(^):這個符號就顯得非常的靈活了,他將會把當(dāng)前庫的版本更新到當(dāng)前major version(也就是第一位數(shù)字)中最新的版本斩熊。放到我們的例子中就是:bluebird:^3.3.4
往枣,這個庫會去匹配3.x.x
中最新的版本,但是他不會自動更新到4.0.0
。
總結(jié)一下:
~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
對應(yīng)就是MAJOR.MINOR.PATCH
:1
是marjor version分冈,15
是minor version圾另,2
是patch version。
MAJOR:這個版本號變化了表示有了一個不可以和上個版本兼容的大更改雕沉。
MINOR:這個版本號變化了表示有了增加了新的功能盯捌,并且可以向后兼容。
PATCH:這個版本號變化了表示修復(fù)了bug蘑秽,并且可以向后兼容饺著。
因?yàn)閙ajor version變化表示可能會影響之前版本的兼容性,所以無論是波浪符號還是插入符號都不會自動去修改major version肠牲,因?yàn)檫@可能導(dǎo)致程序crush幼衰,可能需要手動修改代碼。