语义化版本Semver

460 阅读2分钟

前言

在开发一些项目时,为了更好的管理版本,避免造成版本不必要的混乱,必须有一套版本规则来管理。所以 Gravatars 创办者兼 GitHub 共同创办者 Tom Preston-Werner 就建立了语义化版本控制的规范, semantic version 简称 semver,用以解决在开发项目时对版本失去控制的问题。

正式版本规则

正常的版本号必须采用(X.Y.Z | X > 0),其中 X、Y 和 Z 是非负整数,并且不能包含前导零,即 X > 0。

  • X 是主要版本(Major): 向后不兼容的更改
  • Y 是次要版本(Minor): 向后兼容的功能更改
  • Z 是补丁版本(Patch): 向后兼容的错误修复

每个元素(X.Y.Z | X > 0)必须按数字递增。

例如: 1.9.0 -> 1.10.0 -> 1.11.0 -> 2.0.0 -> 2.0.1

先行版规则

通过在正式版后面附加一个连字符和一系列点分隔标识符来表示,标识符必须仅包含 ASCII 字母数字和连字符 [0-9A-Za-z],数字标识符不得包含前导零,预发布版本的优先级低于相关的普通版本;先行版不稳定,可能无法满足其相关正常版本所表示的预期兼容性要求。

  • alpha:内部测试版,一般不向外部发布,会有很多bug,一般是内部测试人员使用
  • beta:公测版,这个阶段的版本会一直加入新的功能,在alpha版之后推出
  • rc:release candiate,正式版本的候选版,rc版不会再加入新的功能了,主要着重于版本的稳定。

版本要求

  • 通常由三位数组成吗,并且不能包含前导零: X.Y.Z | X > 0
  • 版本要求严格递增
  • 在发布重要版本时,可以发布alpha、rc等先行版本

npm中的版本号匹配规则

version:表示完全匹配当前版本。例:1.1.2 匹配 1.1.2、 2.0.0 匹配 2.0.0

^version:当执行npm install xxx时,默认会在版本号前加上^;表示不超过最左边非零数字。例:^1.2.3 匹配 >=1.2.3 <2.0.0、 ^0.2.3 匹配 >=0.2.3 <0.3.0

~version:表示最接近匹配版本。例: ~1.2.3 匹配 >=1.2.3 <1.3.0、 ~1.2 匹配 >=1.2.0 <1.3.0、 ~1 匹配 >=1.0.0 <2.0.0

>version:表示大于当前版本

>=version:表示大于等于当前版本

<version:表示小于当前版本

<=version:表示小于等于当前版本

*:表示匹配任意版本

latest:表示已发布的最新版本

version1-version2:表示version1 到 version2 的任意版本。例:1.0.0-2.0.0 匹配 >=1.0.0 <=2.0.0

range1 || range2:表示多个范围内的版本。例:< 1.0.0 || >2.0.0 匹配 <1.0.0 或者 >2.0.0

version.x:x的位置表示任意版本。例:1.2.x 匹配 >=1.2.0 <1.3.0

参考文档