語義化版本(SemVer)的范圍

轉(zhuǎn)載自http://www.u396.com/semver-range.html

在使用Node.js和Bower的時(shí)候,其中的 package.json 和 bower.json 都會有dependencies、devDependencies 項(xiàng),對于此前端開發(fā)的童鞋應(yīng)該會比較熟悉。這里面是運(yùn)行時(shí)和開發(fā)時(shí)依賴庫,其中依賴庫對應(yīng)的版本號有很多種寫法,諸如:”~1.0.2
“, “^1.0“, “>=1.0.2“等,其實(shí)可以猜測這種寫法代表了某種范圍,至于具體含義本文給大家做詳細(xì)解釋。

語義化版本格式

我們首先簡單了解一下語義化版本版本號,標(biāo)準(zhǔn)的版本格式為:X.Y.Z,其中:

  • X:主版本號,當(dāng)我們做了不兼容或者顛覆性的更新,修改此版本號。
  • Y:此版本號,當(dāng)我們做了向下兼容的功能性修改,修改此版本號。
  • Z:修訂號,當(dāng)我們做了向下兼容的問題修正,修改此版本號。
  • 其中X、Y和Z必須為非負(fù)整數(shù),禁止數(shù)字前補(bǔ)零,每個(gè)數(shù)值都是遞增的。

語義化版本范圍

版本范圍是一組滿足指定范圍的比較器,一個(gè)比較器是由操作符和版本號組成,下面是最原始的操作符:

  • < 小于;
  • <= 小于等于;
  • > 大于;
  • >= 大于等于;
  • = 等于;如果沒有指定操作符,則默認(rèn)為等于。

一個(gè)范圍可由一個(gè)或者多個(gè)比較器組成,如果有多個(gè),則由雙豎線(||)連接。對于包含多個(gè)比較器,只要滿足其一即可。比如:

  • 范圍 >=1.2.7 <1.3.0 ,版本號 1.2.7, 1.2.8, 1.2.99 滿足條件,而 1.2.6, 1.3.0
    ,1.1.0 確不滿足。
  • 范圍 1.2.7 || >=1.2.9 <2.0.0 ,版本號 1.2.7, 1.2.9, 1.4.6 滿足,而 1.2.8 或者 2.0.0 不滿足。

關(guān)于測試版

Alpha、Beta、Gamma與α、β、λ諧音,是希臘字母前三個(gè)字母,用來表示軟件開發(fā)過程中測試的三個(gè)階段:

  • Alpha:內(nèi)測版,內(nèi)部交流或者專業(yè)測試人員測試用;
  • Beta:公測版,專業(yè)愛好者大規(guī)模測試用,存在一些缺陷,該版本也不適合一般用戶安裝;
  • Gamma:比較成熟的測試版,與即將發(fā)行的正式版相差無幾;
  • RC:是 Release Candidate 的縮寫,意思是發(fā)布倒計(jì)時(shí),候選版本,處于Gamma階段,該版本已經(jīng)完成全部功能并清除大部分的BUG。到了這個(gè)階段只會除BUG,不會對軟件做任何大的更改。從Alpha到Beta再到Gamma是改進(jìn)的先后關(guān)系,但RC1、RC2往往是取舍關(guān)系。
  • Stable:穩(wěn)定版。在開源軟件中,都有stable版,這個(gè)就是開源軟件的穩(wěn)定發(fā)行版。

范圍 >1.2.3-alpha.3,版本1.2.3-alpha.7符合條件,而3.4.5-alpha.9卻不滿足條件。雖然 3.4.5-alpha.9 實(shí)際上大于 1.2.3-alpha.3,但是根據(jù) SemVer 的排序規(guī)則,這個(gè)版本范圍只是接受 1.2.3的測試版,而不接受其他版本的測試版。當(dāng)然 3.4.5 滿足條件,因?yàn)樗皇菧y試版,并且大于 1.2.3-alpha.7。
這么做是有兩個(gè)目的,首先測試版會經(jīng)常更新并且可能包含不適合公開的重大改動,因此被排除在范圍之外;再者,雖然用戶明確此次使用有風(fēng)險(xiǎn)的測試版本,然而下一版本的測試版被包含進(jìn)來仍然是不合適的。

版本范圍高級用法

在版本范圍的高級用法中,與原始的比較器不同,組合不僅僅限于空格和雙豎線,它有以下幾種方式。

連接符(-)范圍 X.Y.Z - A.B.C

下面表示的閉包集合
1.2.3 - 2.3.4 := >=1.2.3 <=2.3.4
如果范圍中的第一個(gè)版本號只有一部分,剩下的部分以零填充。
1.2 - 2.3.4 := >=1.2.0 <=2.3.4
如果范圍中的第二個(gè)版本號只有一部分,代表范圍中包含了這個(gè)版本。
1.2.3 - 2.3 := >=1.2.3 <2.4.0

1.2.3 - 2 := >=1.2.3 <3.0.0

X范圍 1.2.x 1.X 1.2.* *

X, x 或者 * 可以用在主版本號、此版本號以及修訂版本號的任何一個(gè)上面。
* := >=0.0.0 (任何版本都滿足)

1.x := >=1.0.0 <2.0.0 (只要滿足主版本號即可)

1.2.x := >=1.2.0 <1.3.0 (需要滿足主版本和此版本號)

部分版本號的含義與X范圍表示含義一樣,所以X或者*都是可以省略的。

"" (空字符串) := * := >=0.0.0

1 := 1.x.x := >=1.0.0 <2.0.0

1.2 := 1.2.x := >=1.2.0 <1.3.0

波浪線(~)范圍 ~1.2.3 ~1.2 ~1

~1.2.3 := >=1.2.3 <1.(2+1).0 := >=1.2.3 <1.3.0

~1.2 := >=1.2.0 <1.(2+1).0 := >=1.2.0 <1.3.0 (類似于 1.2.x)

~1 := >=1.0.0 <(1+1).0.0 := >=1.0.0 <2.0.0 (類似于 1.x)

~0.2.3 := >=0.2.3 <0.(2+1).0 := >=0.2.3 <0.3.0

~0.2 := >=0.2.0 <0.(2+1).0 := >=0.2.0 <0.3.0 (類似于 0.2.x)

~0 := >=0.0.0 <(0+1).0.0 := >=0.0.0 <1.0.0 (類似于 0.x)

~1.2.3-beta.2 := >=1.2.3-beta.2 <1.3.0
注意版本為1.2.3且大于等于beta.2的測試版本在范圍內(nèi),因此 1.2.3-beta.4
滿足條件,而1.2.4-beta.2不滿足條件。

補(bǔ)注號(^)范圍 ^1.2.3 ^0.2.5 ^0.0.4

允許在不修改[major, minor, patch]中最左非零數(shù)字的更改。換句話說,允許在 1.0.0
及以上版本對次版本號和修訂版本號的更新,允許在 0.1.0以及以上版本對修訂版本號更新,版本為 0.0.X 不允許更新。
^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

^1.2.3-beta.2 := >=1.2.3-beta.2 <2.0.0

^0.0.3-beta := >=0.0.3-beta <0.0.4

^1.2.x := >=1.2.0 <2.0.0

^0.0.x := >=0.0.0 <0.1.0

^0.0 := >=0.0.0 <0.1.0

^1.x := >=1.0.0 <2.0.0

^0.x := >=0.0.0 <1.0.0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,648評論 19 139
  • 語義化版本 2.0.0 摘要 版本格式:主版本號.次版本號.修訂號,版本號遞增規(guī)則如下: 1.主版本號:當(dāng)你做了不...
    24c41111e47b閱讀 378評論 0 0
  • 語義化版本 2.0.0摘要版本格式:主版本號.次版本號.修訂號,版本號遞增規(guī)則如下:主版本號:當(dāng)你做了不兼容的 A...
    benguo閱讀 273評論 0 1
  • 轉(zhuǎn)自 Semantic Versioning 2.0.0 RFC 2119 (Request for Commen...
    i云哲閱讀 2,194評論 0 6
  • 一根鋼筋的端午臆想 第五根 一根鋼筋在切割時(shí) 發(fā)生臆想 一段切成木漿 一段切成龍舟 在汩羅江的幽...
    第五根閱讀 334評論 0 0

友情鏈接更多精彩內(nèi)容