开发者工具

SemVer 计算器分清版本优先级与范围匹配

检查依赖的版本范围、比较两个版本,或预览下一次发版的版本号。

SemVer 计算器

版本列表(每行一个)

输入仅在当前浏览器中处理,不会发送到服务器。

结果

输入内容或载入示例以开始。

选项

只接受严格 SemVer 2.0.0 版本:不修剪首尾空格,不接受 v 前缀或缺少字段。核心版本数字和纯数字预发布标识符不可有前导零;构建标识符可以。

npm 范围接受 ^、~、比较符、x、连字符范围和 ||。空范围及空 OR 分支按通配符处理。

默认排除预发布,除非同组比较符明确指定了相同 major.minor.patch 的预发布版本。

构建元数据不影响优先级。排序时,优先级相同的版本保留输入顺序。

工具上限:1000 行、100000 个 UTF-16 代码单元;每个版本 256 字符、范围 4096 字符。核心版本数字和纯数字预发布标识符不得大于 9007199254740991;构建标识符不受此数值上限约束。

输入或选项已更改,请更新结果后再导出。

SemVer 计算器适合排查这样的疑惑:一个 beta 版本明明更新,为什么仍不满足依赖范围?先区分优先级和匹配条件,再决定是否修改范围。

版本号比较不能直接按文本排序。语义化版本中的 1.10.0 高于 1.9.0;预发布标识符也有数字与文本的比较规则。

为什么使用 SemVer 计算器?

找到预发布未匹配的原因

SemVer 计算器同时显示展开的 npm 范围与逐行结果。即使数字满足上下界,默认的预发布规则仍可能排除该版本。

稳定版本通过范围入口,预发布版本走向独立分支。

保留构建标签,不制造新旧差异

1.2.3+build.1 与 1.2.3+build.7 优先级相同。排序保留它们的输入顺序,构建标签不会把同一版本伪装成更新版本。

版本沿阶梯排列,两个构建标签位于同一阶。

计算前的三个检查

01

严格版本和范围分开输入

版本需要完整三段数字;范围可使用 1.2 或 ^0.2.3 等简写。空范围及空 OR 分支是通配条件,不会被自动忽略。

02

检查预发布开关

默认关闭。打开后改变范围匹配,不放宽版本语法。遇到 0.x 范围时,应查看展开后的比较符条件。

03

先审阅替换内容

示例与清空都先展示完整输入和选项预览,应用后才生效,并可撤销。自动模式等待 350 毫秒;关闭后可按 Ctrl/Cmd+Enter 运行。

四种发版检查

批量范围匹配

每行输入一个版本,测试 npm 比较符、插入符、波浪号、通配符、连字符范围和 OR 组合。

优先级比较

按主版本、次版本、补丁和预发布标识符比较;构建元数据不决定新旧。

稳定版本排序

支持升序和降序。无效行保留在末尾并标注原行号,相同优先级维持输入顺序。

七种递增操作

支持 major、minor、patch、premajor、preminor、prepatch 和 prerelease,仅生成结果,不自动改写原版本。

语法和计算边界

严格版本字符串
只接受严格 SemVer 2.0.0 版本:不修剪首尾空格,不接受 v 前缀或缺少字段。核心版本数字和纯数字预发布标识符不可有前导零;构建标识符可以。 构建元数据不影响优先级。排序时,优先级相同的版本保留输入顺序。
npm 范围语义
npm 范围接受 ^、~、比较符、x、连字符范围和 ||。空范围及空 OR 分支按通配符处理。 默认排除预发布,除非同组比较符明确指定了相同 major.minor.patch 的预发布版本。
输入和数值上限
工具上限:1000 行、100000 个 UTF-16 代码单元;每个版本 256 字符、范围 4096 字符。核心版本数字和纯数字预发布标识符不得大于 9007199254740991;构建标识符不受此数值上限约束。
递增行为
递增会移除构建元数据。新的预发布序号从 0 开始;标识符留空可保留并递增已有的预发布标识符。
只处理输入,不安装依赖
不查询线上包、不安装依赖、不修改项目。列表中的空行无效,仅末尾单一换行作为终止符。范围匹配成功不能证明 API 兼容。

SemVer 计算器常见问题

package.json 中的 ~ 和 ^ 有什么区别?

~1.2.3 接受从 1.2.3 到低于 1.3.0 的稳定版本;^1.2.3 则到低于 2.0.0。^ 保留最左侧非零部分,因此 ^0.2.3 不含 0.3.0,^0.0.3 不含 0.0.4。

最新的预发布版本会被 ^ 范围接受吗?

通常不会。SemVer 计算器遵循 npm:开关关闭时,同组比较符须明确提及相同 major.minor.patch 的预发布版本。是否为线上最新版本不改变这里的判断。

构建元数据有什么用?

可以记录构建编号或提交标识,但不影响优先级。只有 + 后内容不同的版本比较相等,排序保留输入顺序。

可以混合不同格式的标签排序吗?

只排序严格 SemVer 版本。v1.2.3、1.10-alpine3 等标签会标为无效并保留在末尾,不会被静默转换成其他版本。

怎样给版本加上 alpha 后缀?

选择预发布递增并将标识符设为 alpha。从 1.2.3 执行 premajor 得到 2.0.0-alpha.0;已有预发布可递增序号,标识符留空则保留已有标识符。

版本结果不符合预期?

使用 SemVer 计算器

将发版列表交给 SemVer 计算器,审阅范围解释,再保存当前报告。