semver语义版本号标准 & npm的版本控制器
1. 什么是semver
SemVer(语义化版本 Semantic Versioning) 是一种版本命名规范,主要用于软件版本管理,以确保版本号能够清晰表达软件的变化程度和兼容性。
2. semver版本格式
- 主版本号(MAJOR):如果有不兼容的 API 变更,需要升级主版本号。
- 次版本号(MINOR):如果新增了功能,但向后兼容,需要升级次版本号。
- 修订号(PATCH):如果仅仅是修复了 bug,且向后兼容,需要升级修订号。
3. 附加标签
除了主版本、次版本和修订号,SemVer 还支持先行版本(pre-release) 和 构建元数据(Build Metadata)。
- 先行版本(Prerelease):用于标识不稳定版本,如 alpha、beta、rc(Release Candidate),格式 1.0.0-alpha.1,它由 一个短横线 + 一个字符串组成。
- 构建元数据(Build Metadata):仅用于区分构建,如 1.0.0+20230315
4. 如何检验是否符合规范
可以直接使用 semver 库,它提供了丰富的 SemVer 解析功能。
javascript
const semver = require('semver');
console.log(semver.valid("1.0.0")); // "1.0.0"
console.log(semver.valid("1.2.3-alpha.1")); // "1.2.3-alpha.1"
console.log(semver.valid("v1.0.0")); // null
console.log(semver.valid("1.0")); // null
- semver.valid(version) 返回 合法的版本号 或 null
- semver.satisfies(version, range) 可用于判断版本范围
javascript
console.log(semver.satisfies("1.5.0", ">=1.0.0 <2.0.0")); // true
console.log(semver.satisfies("2.0.0", ">=1.0.0 <2.0.0")); // false
5. NPM 版本控制
NPM(Node Package Manager)中的版本控制是基于 SemVer(语义化版本) 进行的。
5.1 版本号前缀符号
NPM 允许使用前缀符号来指定版本范围:
符号 | 说明 | 示例 | 解析 |
---|---|---|---|
^ |
匹配最新的次版本(MINOR 和 PATCH 可变) | "^1.2.3" | 允许 1.x.x(>=1.2.3 <2.0.0) |
~ |
匹配最新的修订号(仅 PATCH 可变) | "~1.2.3" | 允许 1.2.x(>=1.2.3 <1.3.0) |
> |
大于某个版本 | ">1.2.3" | 允许 1.2.4 及以上 |
< |
小于某个版本 | "<1.2.3" | 仅允许 1.2.2 及以下 |
>= |
大于等于某个版本 | ">=1.2.3" | 允许 1.2.3 及以上 |
<= |
小于等于某个版本 | "<=1.2.3" | 允许 1.2.3 及以下 |
- |
版本范围 | "1.2.3 - 1.3.0" | 允许 1.2.3 到 1.3.0 |
* |
任意版本 | "*" | 允许所有版本 |
latest |
最新版本 | "latest" | 安装最新发布的版本 |
示例
- "lodash": "^4.17.20"
-
- 允许 4.17.x,但不会升级到 5.x.x
- "express": "~4.17.1"
-
- 允许 4.17.x,但不会升级到 4.18.0 或 5.x.x