版本命名及限定規則詳解

zenHeart發表於2019-02-16

理解版本命名及限定規則

前言:講解版本命名和版本限定的相關知識


版本命名規則

我們常見的版本命名格式為

[name].x.y.z-[state]
  • name為可選欄位,一般為 v,表示 version
  • x.y.z 為各版本的序號,遵循 語義化版本命名規範
    實際上基於此規範,不應該在版本前出現 name 欄位.
  • state 可選欄位,表示版本狀態,例如 b 表示 beta 測試版,其他常見狀態,後有詳述

語義化版本命名規則

該規則對版本的迭代命名,做了很好的限制.
核心規則如下.

序號 格式要求 說明
x 非負整數 主版本號(major),進行不向下相容的修改時,遞增主版本號
y 非負整數 次版本號(minor),保持向下相容,新增特性時,遞增次版本號
z 非負整數 修訂號(patch),保持向下相容,修復問題但不影響特性時,遞增修訂號
  • 0.y.z 表示開發階段,一切可能隨時改變,非穩定版。
  • 1.0.0 界定此版本為初始穩定版,後面的一切更新都基於此版本進行修改。

版本狀態

描述方式 說明 含義
αa alpha 版 內測版本,內部測試的版本,bug 較多
βb beta 版 公測版本,給外部進行測試的版本,有缺陷
γg Gamma 版 相當成熟的測試版,於發行版相差無幾
rc Release Candidate 是前面三種測試版的進一步版本,實現了全部功能,清除了大部分 bug,接近釋出倒數計時,有時會進一步細分為 rc1,rc2

實際上大部分前端工具均遵守上述規則

在商業軟體中還會見到如下欄位.

描述方式 說明 含義
Demo 演示版 只整合了正式版部分功能,無法升級
SP SP1 是 service pack 的意思表示升級包
Trial 試用版 試用版
Unregistered 未註冊 有功能或時間限制的版本
Lite 精簡版 只含有正式版核心功能
enhance 增強版 屬於正式版1
free 免費版 自由使用版本
release 發行版 有時間限制
upgrade 升級版 有功能增強或修復 bug
Retail  零售版 單獨發售
Cardware 共享版 公用許可證

版本限定

在進行包管理時,為了保證安裝依賴的相容性.
必須對依賴包版本進行限定.參考 npm 限定描述
舉例如下

{
  "devDependencies": {
    "karma": "0.13.22"
  }
}

表示安裝 0.13.22 版本的 karma.

為了方便理解,版本限定的語法簡述為為 [範圍描述]<版本號描述>

  • 範圍描述可選,必須配和版本描述確定範圍,無法獨立存在

    • < 小於某一版本號
    • <= 小於等於某一版本號
    • > 大於某一版本號
    • >= 大於等於某一版本號
    • = 等於某一版本號,沒有意義和直接寫該版本號一樣
    • ~ 基於版本號描述的最新補丁版本
    • ^ 基於版本號描述的最新相容版本
    • - 某個範圍,他應該出現在兩個版本描述中間,實際上語法應為 <版本描述>-<版本描述>,寫在此處為了統一

    嚴格來講對 ~,^ 的表述需要結合具體的包管理工具和版本號規則來確定.但是對於一般使用記住如下原則.
    ^ 是確保版本相容性時,預設對次版本號的限定約束
    ~ 是確保版本相容性時,預設對補丁號的約束

    利用 ^,~ 的意義在於確保工具包對依賴版本的相容性,排除主版本更迭,
    造成依賴失效的可能.

  • 版本描述

    • * 萬用字元,類似 glob 模式 *
    • x,X 約等於 * 號,通常用於次版本和補丁的通配.

    0.x 警惕這種版本,說明該依賴還未穩定(如果它遵守語義化命名的話),此外由於 0.x 版本隨時可能改變,此時 ^,~ 的都表示為對補丁版的限制.

相關舉例如下

< 1.2.3     小於1.2.3 的版本均可 
= 1.2.3     只支援等於1.2.3 的版本 
<= 1.2.3    只支援小於等於1.2.3 的版本
> 1.2.3     只支援大於 1.2.3 的版本
>= 1.2.3    只支援大於等於 1.2.3 的版本
1.2.3-2     支援 >=1.2.3 <3.0.0 的版本
1.x.1       支援 >=1.0.1 <1.1.0 的版本
*           支援 >= 0.0.0 的版本
""          同 *
1           表示 >=1.0.0 <2.0.0 其餘任意位置為空相似
1.0         >= 1.0.0 < 1.1.0
~1.1.1      >=1.1.1 <1.2.0
~1.1        >=1.1.0 <1.2.0
~1          >=1.0.0 <2.0.0
^1.1.1      >=1.1.1 <2.0.0
^0.1.1      >=0.1.1 <0.2.0 注意這裡,不要以為是 0.1.1-1.0.0 之間
^0.0.1      >=0.0.1 <0.0.2 同上,請注意

注意大部分包管理工具均遵守上述規則,但是在進行版本限定時,請參考包管理工具的配置項說明,確定語法格式.

總結

最常用的知識

核心命名規則

  • 版本號通常稱為 x.y.z

    • x 主版本號,一般向下不相容時增加此值
    • y 次版本號,向下相容,新增新特性時增加此值
    • z 補丁號,修復問題為改變特性時增加此值
    • a,b,rc 分別表示 內測,公測,發行狀態

版本限定

  • ~ 在依賴版本相容下,最近的補丁版
  • ^ 在依賴版本相容下,最近的次版本

重點是保證版本依賴的相容性,不允許出現依賴的主版本號範圍可變,即使你的開發包依舊可用

參考資料

語義化版本規範

npm 版本說明

composer version constraints

百度文庫-版本說明詳解

wiki 軟體版本

What`s the difference between tilde(~) and caret(^) in package.json

相關文章