# 版本号命名规则

# 常见版本号命名格式

[name].x.y.z-[state]
  • name 为可选字段,一般为 v,表示 version
  • x.y.z 为各版本的序号,遵循语义化版本命名规范 (opens new window),实际上基于此规范,不应该在版本前出现 name 字段
  • state 为可选字段,表示版本状态,例如 b 表示 beta 测试版,其他常见状态,后有详述

# 语义化版本命名规则

序号 格式要求 说明
x 非负整数 主版本号(major),进行不向下兼容的修改时,递增主版本号
y 非负整数 次版本号(minor),保持向下兼容,新增特性时,递增次版本号
z 非负整数 修订号(patch),保持向下兼容,修复问题但不影响特性时,递增修订号
  • 0.y.z 表示开发阶段,一切可能随时改变,非稳定版。
  • 1.0.0 界定此版本为初始稳定版,后面的一切更新都基于此版本进行修改。

# 版本状态

描述方式 说明 含义 例子
αa alpha 版 内测版本,内部测试的版本,bug 较多
βb beta 版 公测版本,给外部进行测试的版本,有缺陷 Typora Beta 版本
γg Gamma 版 相当成熟的测试版,于发行版相差无几
rc Release Candidate 是前面三种测试版的进一步版本,实现了全部功能,清除了大部分 bug,接近发布倒计时,有时会进一步细分为 rc1,rc2 log4j-2.15.0-rc1 (opens new window)log4j-2.15.0-rc2 (opens new window)
Demo 演示版 只集成了正式版部分功能,无法升级
SP SP1 是 Service Pack 的意思表示升级包 Windows 7 SP1
Trial 试用版 试用版
Unregistered 未注册 有功能或时间限制的版本
Lite 精简版 只含有正式版核心功能
enhance 增强版 属于正式版1
free 免费版 自由使用版本
release 发行版 有时间限制
upgrade 升级版 有功能增强或修复 bug
Retail 零售版 单独发售
Cardware 共享版 公用许可证

例如,之前 log4j2 漏洞爆发的时候就紧急发布了 2.15.0-rc1 和 2.15.0-rc2 版本。如果不清楚的话可以先看一下这篇文章 Log4j2远程代码执行漏洞,数十万个项目中枪 (opens new window)

# 版本限定

在进行包管理时,为了保证安装依赖的兼容性。必须对依赖包版本进行限定。 举例如下:

{
  "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 分别表示 内测,公测,发行状态

# 版本限定

  • ~ 在依赖版本兼容下,最近的补丁版
  • ^ 在依赖版本兼容下,最近的次版本

重点是保证版本依赖的兼容性,不允许出现依赖的主版本号范围可变,即使你的开发包依旧可用

参考资料:

语义化版本 (opens new window)

版本命名及限定规则详解 (opens new window)

百度文库-版本说明详解 (opens new window)