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 解析功能。
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) 可用于判断版本范围
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
4 条评论
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com
新项目准备上线,寻找志同道合的合作伙伴
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
测试评论区