理解版本命名及限定規則
前言:講解版本命名和版本限定的相關知識
版本命名規則
我們常見的版本命名格式為
[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
分別表示 內測,公測,發行狀態
版本限定
-
~
在依賴版本相容下,最近的補丁版 -
^
在依賴版本相容下,最近的次版本
重點是保證版本依賴的相容性,不允許出現依賴的主版本號範圍可變,即使你的開發包依舊可用
參考資料
What`s the difference between tilde(~) and caret(^) in package.json