语义化版本规范摘要

语义化版本(Semantic Versioning)规范摘要 

依赖地狱。通过版本号管理依赖、识别依赖包的软件兼容性风险。

使用语义化版本控制的软件必须定义公共 API。其版本规范是为了对其公共API的变化进行规范化的约束管理。

标记版本号的软件发行后,禁止改变;任何修改都必须以新版本发行。主版本号为0时是开发版,一切变化皆有可能;当主版本号>=1时为发行版,必须保持公共API的稳定,其版本变更需遵循如下规范。

版本号构成规则

语义化的版本号,由五部分组成【X.Y.Z-P+M】,即:【主版本号.次版本号.修订号-先行版本号+版本编译元数据】。

标准版本号仅包含X、Y、Z三部分。

其中 X、Y 和 Z 为非负的整数,变更时必须递增;P、M是一连串以句点分隔的标识符,是可以省略的。

版本号的五个组成部分,均不可以包含空白、标识符由 [0-9A-Za-z-] 组成、句点分割的纯数字部分禁止在数字前方补零。

常见的先行版本号名称:

  • alpha:内部测试版,一般不向外部发布,会有很多Bug.一般只有测试人员使用。
  • beta:测试版,这个阶段的版本会一直加入新的功能。在Alpha版之后推出
  • rc:(Release Candidate) 发行候选版本。RC版不会再加入新的功能了,主要着重于除错。

1.0.0-alpha、1.0.0-alpha.1、1.0.0-0.3.7、1.0.0-x.7.z.92、1.0.0-alpha+001、1.0.0+20130313144700、1.0.0-beta+exp.sha.5114f85。

版本号递增规则

  1. 主版本号:进行了不兼容的 API 修改
  2. 次版本号:API 向下兼容、新增了功能
  3. 修订号:API 向下兼容、进行了Bub修正
  4. 主版本号递增时,次版本号、修订号都必须要归零;次版本号递增时,修订号必须归零

1.9.1 -> 1.10.0 -> 1.10.1 -> 1.10.2 -> 1.11.0

版本号比较规则

版本的优先层级指的是不同版本在排序时如何比较。M部分不参与比较。

版本号的X、Y、Z、P四个部分拆分后,由左到右依序比较每个标识符,第一个差异值用来决定优先层级。

包含P的版本号的优先级低于相关联的标准版本号。

P部分的多个标识符也得拆分后,由左到右依序比较每个标识符,第一个差异值用来决定优先层级。

纯数字的标识符按数字比较,非纯数字的标识符按字符串比较。数字的标识符比非数字的标识符优先层级低。

若开头的标识符都相同时,标识符个数多的优先层级高。

1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0。

 

规范实现

semver 是 语义化版本规范 的一个实现,实现了版本和版本范围的解析、计算、比较,由 npm 的团队维护。

  • 固定版本:是指例如 0.4.1、1.2.7、1.2.4-beta.0 这样表示包的特定版本的字符串。
  • 范围版本:是对满足特定规则的版本的一种表示,例如 1.2.3-2.3.4、1.x、^0.2、>1.4.
  •  

版本号依赖定义语法

  • xX*:表示通配符
  • ^ 表示同一主版本号中,不小于指定版本号的版本号
  • ~ :表示同一主版本号和次版本号中,不小于指定版本号的版本号
  • ><=>=<=-:用来指定一个版本号范围
  • ||:表示或
  •  

你可能感兴趣的:(版本管理)