这里将详细的介绍语义化版本号的相关内容
版本号一般有三个部分,以.隔开,就像 X.Y.Z
,其中
- X:主版本号,不兼容的大改动
- Y:次版本号,功能性的改动
- Z:修订版本号,问题修复
每个部分为整数 (>=0),按照递增的规则改变。
在修订版本号的后面可以加上其他信息,用-连接,比如:
- X.Y.Z-Alpha: 内测版
- X.Y.Z-Beta: 公测版
- X.Y.Z-Stable: 稳定版
在 package.json
文件中,我们所安装的依赖,都会有版本号的描述,比如使用初始化的一个 react
工程,在它的 package.json
里自动安装的依赖
"devDependencies": {
"react": "^15.6.1",
"react-dom": "^15.6.1"
}
其实我们平时看到的版本号,不止有 ^ 前缀的,还有~、x、* 和 -,那么他们代表的含义是什么呢?
^: 允许在不修改[X, Y, Z]中 最左非零数字 的更改。举例说明:
在 X.Y.Z
结构的版本号中,X、Y、Z 都是非负的整数,上面定义的意思就是说从左向右,遇到第一个非零数字是不可修改的,下一个数字可以更改,比如:
- X、Y、Z 都不为0,
^15.6.1
,最左的非零数字是15
,所以X
是不允许更新的,也就是说主版本号不会超过15
,表示的就是版本号>=15.6.1 && <16.0.0
- 如果
X
为0
,那么第一个非零数字就是Y
,就只能对Z
做出修改,^0.1.2
表示版本号>=0.1.2 && < 0.2.0
- 如果 X、Y 的数字都是
0
的话,第一个非零数字就是Z
,表示的就是版本号不允许更新;^0.0.2
,主版本号和次版本号都是0
,修订号为非零,表示的就是版本号>=0.0.2 && < 0.0.3
~: 匹配大于 X.Y.Z 的更新 Z 的版本号
也就是说只会更新 Z
的版本号。同样举例说明:
- X、Y、Z都不为
0
,~1.2.3
表示版本号>=1.2.3 && < 1.3.0
- X 为
0
,~0.2.3
表示版本号>=0.2.3 && < 0.3.0
,这种情况下,~
等价于^
- X、Y 为
0
,~0.0.3
表示版本号>=0.0.3 && < 0.1.0
x: 可以替代X、Y、Z中任意一个,表示该位置可更新
1.2.x
标识只有 Z 的位置可以更新,表示版本号>=1.2.0 && < 1.3.0
1.x
: 表示 Y 和 Z 的位置可以更新,表示版本号>=1.0.0 && < 2.0.0
*
: 任意版本都可以
上面的 x
可以用 *
代替,其实,用 x
或 *
的地方可以省略不写,比如 1.2.x
和 1.2
表示的意思是一样的。
-:包含第一个版本号和第二个版本号的范围 表示的是一个闭区间,-连接的两个版本号范围都包括
举例说明:
0.1.0-2
: 表示版本号:>=0.1.0 && < 3.0.0
0.1.0-2.1.1: 表示版本号:
>=0.1.0 && <= 2.1.1`