語義化版本(SemVer)的範圍

轉自 http://www.u396.com/semver-range.html

在使用 Node.jsBower 的時候,其中的 package.jsonbower.json 都會有 dependenciesdevDependencies 項,對於此前端開 發的童鞋應該會比較熟悉。這裏面是運行時和開發時依賴庫,其中依賴庫對應的版本號有很多種寫法,諸如:”~1.0.2“, “^1.0“, “>=1.0.2“等,其實可以猜測這種寫法代表了某種範圍,至於具體含義本文給大家做詳細解釋。

語義化版本格式

我們首先簡單瞭解一下語義化版本版本號,標準的版本格式爲:X.Y.Z,其中:

  • X:主版本號,當我們做了不兼容或者顛覆性的更新,修改此版本號。
  • Y:此版本號,當我們做了向下兼容的功能性修改,修改此版本號。
  • Z:修訂號,當我們做了向下兼容的問題修正,修改此版本號。
    其中XYZ必須爲非負整數,禁止數字前補零,每個數值都是遞增的。

標題語義化版本範圍

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

  • < 小於;

  • <= 小於等於;

  • > 大於;

  • >= 大於等於;

  • = 等於;如果沒有指定操作符,則默認爲等於。
    一個範圍可由一個或者多個比較器組成,如果有多個,則由雙豎線(||)連接。對於包含多個比較器,只要滿足其一即可。比如:

  • 範圍 >=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不滿足。

標題關於測試版

AlphaBetaGammaαβλ諧音,是希臘字母前三個字母,用來表示軟件開發過程中測試的三個階段:

  • Alpha:內測版,內部交流或者專業測試人員測試用;
  • Beta:公測版,專業愛好者大規模測試用,存在一些缺陷,該版本也不適合一般用戶安裝;
  • Gamma:比較成熟的測試版,與即將發行的正式版相差無幾;
  • RC:是 Release Candidate 的縮寫,意思是發佈倒計時,候選版本,處於Gamma階段,該版本已經完成全部功能並清除大部分的BUG。到了這個階段只會除BUG,不會對軟件做任何大的更改。從AlphaBeta再到Gamma是改進的先後關係,但RC1RC2往往是取捨關係。
  • Stable:穩定版。在開源軟件中,都有stable版,這個就是開源軟件的穩定發行版。

範圍>1.2.3-alpha.3,版本1.2.3-alpha.7符合條件,而3.4.5-alpha.9卻不滿足條件。雖然 3.4.5-alpha.9 實際上大於 1.2.3-alpha.3,但是根據 SemVer 的排序規則,這個版本範圍只是接受 1.2.3 的測試版,而不接受其他版本的測試版。當然 3.4.5 滿足條件,因爲它不是測試版,並且大於 1.2.3-alpha.7

這麼做是有兩個目的,首先測試版會經常更新並且可能包含不適合公開的重大改動,因此被排除在範圍之外再者,雖然用戶明確此次使用有風險的測試版本,然而下一版本的測試版被包含進來仍然是不合適的。

標題版本範圍高級用法

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

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

下面表示的閉包集合

  • 1.2.3 - 2.3.4 := >=1.2.3 <=2.3.4
    如果範圍中的第一個版本號只有一部分,剩下的部分以零填充。

  • 1.2 - 2.3.4 := >=1.2.0 <=2.3.4
    如果範圍中的第二個版本號只有一部分,代表範圍中包含了這個版本。

  • 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或者 * 可以用在主版本號、此版本號以及修訂版本號的任何一個上面。

-* := >=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的測試版本在範圍內,因此 1.2.3-beta.4 滿足條件,而1.2.4-beta.2不滿足條件。

補註號(^)範圍 ^1.2.3 ^0.2.5 ^0.0.4

允許在不修改[major, minor, patch]中最左非零數字的更改。換句話說,允許在 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章