package-版本号-Semver

283 阅读3分钟

结构

标准的版本号必须(MUST)采用 X.Y.Z 的格式,其中 X、Y 和 Z 为非负的整数,且禁止(MUST NOT)在数字前方补零。X 是主版本号、Y 是次版本号、而 Z 为修订号。每个元素必须(MUST)以数值来递增。例如:1.9.1 -> 1.10.0 -> 1.11.0。

  1. 主版本号:当你做了不兼容的 API 修改,
  2. 次版本号:当你做了向下兼容的功能性新增,
  3. 修订号:当你做了向下兼容的问题修正。

先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸。

  • X.Y.Z-Alpha: 内测版
  • X.Y.Z-Beta: 公测版
  • X.Y.Z-Stable: 稳定版

范例:1.0.0-alpha+001、1.0.0+20130313144700、1.0.0-beta+exp.sha.5114f85。

范围规则

有相同主版本号、次版本号及修订号的两个先行版本号,其优先层级必须透过由左到右的每个被句点分隔的标识符来比较,直到找到一个差异值后决定:

1.  只有数字的标识符以数值高低比较。
2.  有字母或连接号时则逐字以 ASCII 的排序来比较。
3.  数字的标识符比非数字的标识符优先层级低。
4.  若开头的标识符都相同时,栏位比较多的先行版本号优先层级比较高。

例如: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。
    

实际

在 package.json 中
^: 不允许修改最左边非0版本 (^1.1.11: 版本 >= 1.1.11 且 < 2.0.0)
~: 匹配大于X.Y.Z的更新Z的版本号 (~1.1.11: 版本 >= 1.1.11 且 < 1.2.0)
-: 两个版本号的范围 表示的是一个闭区间 ( 1.1.11-2: 版本 >=1.1.11 && < 3.0.0)
*: 任何非预发版本 (版本 >=0.0.0)

常遇到的一些版本后缀

npm 包常见
  • Alpha版:一般实现了功能,但没有完整的测试,可以理解为尝鲜版;
  • Beta版:一般是相对于Alpha版本而言比较稳定的版本,但这个版本一般不推荐用于生产环境。
  • RC版:Release Candidate,直译过来就是发布版候选者,一般发布之前可能会有很多个候选者版本。
  • Release版:发行版本,又叫生产版本(Production Relase),它只会增加一些安全补丁等,不会增加新功能和改变自带软件的版本,通常光盘或者网上提供的ISO就是该版本
镜像,系统常见
  • mainline版本: 可以理解为开发版本,新的功能都会放到这个版本
  • stable版本:某个版本系列中的最新版本,同时它也是经过测试相对稳定的版本
  • legacy版本:历史版本,有时候你的环境版本比较低,就需要历史版本
  • latest版本:一般是指最新稳定版,有时间我们不关心版本号,只是想使用最新稳定版,就可以指定这个。
  • snapshot版本,也即开发版,我们创建maven项目时,编辑器会自动给我们填入 1.0-SNAPSHOT版本,也就是1.0开发版,这个版本不能使用,因为该版本处于开发的过程,所以运行时会不时地更新,导致功能变化,正式环境中不得使用snapshot版本的库
  • LTS 版本: 长期支持的稳定版,比如操作系统一般会提供这个版本,因为生产环境操作系统不会频繁升级,必须保证可以长期被其维护者维护。