1 为什么要有SemVer?
SemVer用来规范组件之间的依赖版本,它使用一个版本号来传递出组件的API的变化情况。
在理解这规范之后,看一眼依赖包的版本号,就知道API的变化(兼容性)程度,方便了依赖管理,避免了依赖混乱带来的问题。
(降低大工程的复杂度-->组件化-->明确API兼容性(稳定性))
2 规范的内容是怎样的?
首先是版本号的组成形式,然后是这个形式对应的版本兼容性(API Compatibility)含义,最后是不同版本号之间的
优先层级(version precedence)比较。
2.1 组成格式:
[主].[次].[修订]-[先行]+[编译元数据]
(主:major 次:minor 修订:patch 先行:pre-release(预发布) 编译元数据:build metadata)
在字符使用上,主,次,修订版本号都是使用(非0开头)数字;
先行版本号和编译元数据使用数字和英文字母以及连字符,即[0-9A-Za-z-],格式上可有多段由句点连接起来。
例子:
1.0.0-beta+exp.sha.5114f85
主版本号:1,次版本号:0,修订号:0;先行号:beta,编译元数据:exp.sha.5114f85
2.2 不同版本号的含义
- 主版本号:当你做了不兼容的 API 修改,
- 次版本号:当你做了向下兼容的功能性新增,
- 修订号:当你做了向下兼容的问题修正,
- 先行号:可能不稳定,不满足兼容性的临时版本,
- 编译元数据:只是标识编译版本。
2.3 优先层级
优先层级是指不同版本号如何排序。具体是:依次比较主版本号,次版本号,修订号以及先行号,
先比较的号码有结果就不再比较后续号码。此外,先行号从左到右按照句点分开逐个比较。最后,
编译元数据不影响版本号的优先层级。
范例:
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