我們可以通過package.json來限定我們想要引用的包的版本范圍,這里描述下相關(guān)的語法,便于在以后查看package.json的時候不會有疑惑:
版本表示
版本只有三段,分別代表: major.minor.patch
- major:發(fā)生不兼容的API改變時變更這個版本號段
- minor:以向后兼容的方式增加了一些功能時變更這個版本號段
- patch:修復(fù)了一些bug但仍保持向后兼容時變更這個版本號段
Prerelease Tag
版本還可以有個預(yù)發(fā)布標(biāo)記(alpha、beta、rc),并以短橫隔開,預(yù)發(fā)布標(biāo)記也可以帶上自己的版本號段,形如: 1.2.3-beta.5
一旦有預(yù)發(fā)布標(biāo)記,那么版本范圍的語法表示就和普通的三段式版本范圍有所不同,其范圍的限定都是在前三段版本major.minor.patch一致的基礎(chǔ)上,并且是相同的預(yù)發(fā)布標(biāo)記情形來對預(yù)發(fā)布版本號段進(jìn)行范圍限定,例如:1.2.3-beta.6是滿足比1.2.3-beta.5要大的版本,但1.2.4或1.2.3-rc.2這樣的都不滿足
版本范圍的語法表示
- x、X、*這三個用來表示任意數(shù)值(可以用一個開閉區(qū)間來表示)
* 表示 [0.0.0, ) 即任意版本
1.x 表示 [1.0.0, 2.0.0) 的版本
1.2.X 表示 [1.2.0, 1.3.0) 的版本
- 用 X.Y.Z - A.B.C 這樣的方式來表達(dá)版本范圍,缺失的版本號段用x補上
1.2.3 - 2.3.4 即 [1.2.3, 2.3.4],兩個閉區(qū)間
1.2 - 2.3.4 即 1.2.x - 2.3.4 即 [1.2.0, 2.3.4],也是兩個閉區(qū)間
1.2.3 - 2.3 即 1.2.3 - 2.3.x 即 [1.2.3, 2.4.0),閉開區(qū)間
1.2.3 - 2 即 1.2.3 - 2.x.x 即 [1.2.3, 3.0.0),閉開區(qū)間
- ~X.Y.Z語法
允許最右邊明確的版本號段往高發(fā)生改變,保持其余版本號段不變;如果只有單一的明確版本號,那么需保持這個號段不變,其他非明確的可以往高發(fā)生變化
~1.2.3 即 [1.2.3, 1.3.0)
~1.2 即 [1.2.0, 1.3.0) 和1.2.x一樣
~1 即 [1.0.0, 2.0.0) 和1.x一樣
~0.2.3 即 [0.2.3, 0.3.0)
~0.2 即 [0.2.0, 0.3.0) 和 0.2.x一樣
~0 即 [0.0.0, 1.0.0) 和0.x一樣
~1.2.3-beta.2 即 [1.2.3-beta.2, 1.3.0),注意這種帶預(yù)發(fā)布標(biāo)記要求major.minor.patch三個版本號一樣
- ^X.Y.Z語法
只要最左邊非0的確定版本號段不發(fā)生變化,其他號段可以往高發(fā)生變化,如果確定的版本號段都是0,那么最左邊的0保持不變,其他版本號段往高發(fā)生變化
^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)
^0.0.3-beta 即 [0.0.3-beta, 0.0.4),注意需同時滿足預(yù)發(fā)布標(biāo)記版本的要求
^1.2.x 即 [1.2.0, 2.0.0)
^0.0 即 [0.0.0, 0.1.0) 和 ^0.0.x一樣
^1.x 即 [1.0.0, 2.0.0)
^0.x 即 [0.0.0, 1.0.0)
一般正式版本為1.0.0,那么在版本低于1.0.0的0.x開發(fā)階段,0.2到0.3的變化很有可能是會發(fā)生巨大變化而產(chǎn)生不兼容的,所以^0.2這樣的語法就可以適應(yīng)這種場景