概述
Semmantic Versioning是由github起草的具有指导意义的,统一的版本号表示规则:
软件的版本通常由三位组成,形如: X.Y.Z(主版本号/次版本号/修订号).
版本是严格递增的,例如: 16.2.0 -> 16.3.0 -> 16.3.1;
- 在发布重要版本时,可以发布alpha,beta,rc等现行版本;
- alpha 和 rc 等修饰版本的关键字后面可以加上次数和meta信息.
版本格式
- 主版本号(major):当你做了不兼容的 API 修改;
- 次版本号(minor): 当你做了向下兼容的功能性新增,可以理解为 feature 版本;
- 修订号(Patch):当你做了向下兼容的问题修正,可以理解为bug fix 版本.
先行版本
当要发布大版本或者核心的Feature时,但是又不能保证这个版本的功能 100% 正常。这个时候就需要通过发布先行版本。比较常见的先行版本包括:内测版、灰度版本了和RC版本。Semver规范中使用alpha、beta、rc(以前叫做gama)来修饰即将要发布的版本。它们的含义是:
- alpha:内部版本;
- beta:公测版本:
- rc:即release candiate,正式版本的候选版本
比如:1.0.0-alpha.0, 1.0.0-alpha.1, 1.0.0-beta.0, 1.0.0-rc.0, 1.0.p-rc.1 等版本。alpha, beta, rc后需要带上次数信息。
版本发布准则
- 标准的版本号必须按照XYZ的格式,并且XYZ为飞负的整数,禁止在数字前方补0,版本发布号要严格递增;
- 某个软件版本发布后,任何修改都必须以新版本发行;
- 1.0.0用于界定公共API,当你的软件发布到了正式环境,或者有稳定的API时,就可以发布1.0.0版本了;
- 版本的有限层级指的是不同版本在排序时如何比较.判断优先级时,必须把版本依照顺序拆分为主板本号,次版本号,修订号和先行版本号后进行比较.
NPM 包依赖
当执行:
npm install package -s
来安装第三方包时,npm首先会安装包的最新版本,然后把包的名称以及版本号写在package.json文件中.
指定可用的版本号范围
仅更新修复版本
- 最简写法: 1.0
- 使用通配符的写法: 1.0.x
- 使用模糊符的写法: ~1.0.4(大于等于1.0.4 且小于1.1.0)
跟进每个小版本更新
- 最简写法: 1
- 使用通配符: 1.x 1.x.x
- 使用模糊符: ^1.0.4(大于等于1.0.4且小于2.0.0)
始终升级到最新版
- 最简写法: *
- 使用通配符的写法: *
- 使用模糊符的写法: *(大于等于0.0.0)
NPM 包依赖
通常我们发布一个包到npm仓库时,我们的做法是先修改 package.json 为某个版本,然后执行 npm publish 命令。手动修改版本号的做法建立在你对Semver规范特别熟悉的基础之上,否则可能会造成版本混乱。npm 考虑到了这点,它提供了相关的命令来让我们更好的遵从Semver规范:
- 升级补丁版本号: npm version patch
- 升级小版本号: npm version minor
- 升级大版本号: npm version major
当执行npm publish 时,会首先将当前版本发布到npm registry,然后更新dist-tags.latest的值为新版本.
当执行 npm publish –tag=next 时,会首先将当前版本发布到 npm registry,并且更新 dist-tags.next 的值为新版本。这里的 next 可以是任意有意义的命名(比如:v1.x、v2.x 等等)