SemVer 版本范围测试
开发工具
正在载入
正在加载工具
工具代码会在打开时按需载入,请稍候。
本工具的全部运算都发生在你的浏览器中,输入内容不会发送到任何服务器。
关于这个工具
输入 npm 风格的版本范围,并按每行一个版本粘贴列表,只检查你提供的版本。内置 node-semver 7.8.5 引擎使用 loose: false,区分匹配的有效版本、范围外的有效版本和无效条目。结果包含规范化比较器分组、升序匹配列表,以及该列表中的最小和最大版本。组内比较器为 AND,组间为 OR;预发布开关明确控制 includePrerelease。解析在浏览器本地完成,不查询软件包仓库,也不执行软件包代码。
常见用途
- 修改依赖声明前,用已有版本列表比较 ^、~、连字符、通配符和比较器范围的实际匹配结果。
- 解释 0.x 或预发布版本被排除的原因,并切换 includePrerelease 对照规则差异。
- 将格式无效的版本与有效但不匹配的版本分开,按 SemVer 优先级检查顺序,避免把构建元数据当成更高版本。
使用方法
- 1.输入 ^0.2.3、~1.2.3、1.2.3 - 2.0.0 或 >=1.2.3 <2.0.0 等范围,用 || 表示或。范围留空等价于通配符 *。
- 2.每行粘贴一个完整版本,并选择是否包含预发布版本。两端空白会移除,空白行会跳过;版本条目仍须包含 major.minor.patch。
- 3.运行检查,查看逐行状态、规范化分组和排序后的匹配列表,按需复制或下载 JSON 报告。修改范围、列表或预发布设置会清除结果;最小和最大值仅来自输入中的匹配版本。
npm SemVer 实例
1.0.0 之前的插入符范围
{
"range": "^0.2.3",
"versions": "0.2.3\n0.2.9\n0.3.0\n0.2.4-beta.1",
"includePrerelease": false
}{
"matches": [
"0.2.3",
"0.2.9"
],
"unmatched": [
"0.3.0",
"0.2.4-beta.1"
],
"invalid": [],
"minimum": "0.2.3",
"maximum": "0.2.9"
}^0.2.3 只允许低于 0.3.0-0 的发布版本。虽然 0.2.4-beta.1 的数字元组位于稳定边界之间,默认预发布门槛仍将其排除。此处最大值为 0.2.9,因为它是输入中最大的匹配版本。
只为同一元组接纳预发布
{
"range": ">=1.2.3-beta.2 <1.3.0",
"versions": "1.2.3-beta.4\n1.2.4-beta.1\n1.2.3",
"includePrerelease": false
}{
"matches": [
"1.2.3-beta.4",
"1.2.3"
],
"unmatched": [
"1.2.4-beta.1"
],
"invalid": [],
"minimum": "1.2.3-beta.4",
"maximum": "1.2.3"
}范围显式提到 1.2.3 的预发布,所以 1.2.3-beta.4 可以匹配。includePrerelease 为 false 时,不同元组的 1.2.4-beta.1 被排除。排序时稳定的 1.2.3 位于其预发布版本之后。
包含预发布仍须满足边界
{
"range": "^1.2.3",
"versions": "1.2.3\n1.3.0-beta.1\n2.0.0-beta.1",
"includePrerelease": true
}{
"matches": [
"1.2.3",
"1.3.0-beta.1"
],
"unmatched": [
"2.0.0-beta.1"
],
"invalid": [],
"minimum": "1.2.3",
"maximum": "1.3.0-beta.1"
}includePrerelease 为 true 时,1.3.0-beta.1 可以匹配 ^1.2.3。但展开后仍要求低于 2.0.0-0,因此 2.0.0-beta.1 依然不匹配。
通配符、无效行与构建元数据的稳定顺序
{
"range": "",
"versions": "1.2.3+build.2\n\n1.2.3+build.1\n1.2\n01.2.3\n=1.2.3\n v1.2.4 ",
"includePrerelease": false
}{
"matches": [
"1.2.3+build.2",
"1.2.3+build.1",
"1.2.4"
],
"unmatched": [],
"invalid": [
"1.2",
"01.2.3",
"=1.2.3"
],
"minimum": "1.2.3+build.2",
"maximum": "1.2.4"
}空范围等价于 *。空白行被跳过,两端空白及允许的 v 前缀在规范化时移除;不完整、补零或带 = 前缀的版本行无效。构建后缀保持可见;相同优先级保留输入顺序,因此 build.2 仍在 build.1 之前。
用 OR 排除一个版本
{
"range": "<1.2.3 || >1.2.3",
"versions": "1.2.2\n1.2.3+build.7\n1.2.4",
"includePrerelease": false
}{
"matches": [
"1.2.2",
"1.2.4"
],
"unmatched": [
"1.2.3+build.7"
],
"invalid": [],
"minimum": "1.2.2",
"maximum": "1.2.4"
}用两个分组表达排除,无须不受支持的 != 操作符。1.2.3+build.7 与 1.2.3 的优先级相同,所以也被排除。输出仅概括提交的版本,不查询软件包仓库。
常见范围测试错误
- 将 != 当成范围操作符:请用 <1.2.3 || >1.2.3 等两个比较器分组表示排除。
- 在版本列表中粘贴包名、latest 等标签、逗号分隔列表或不完整版本:请每行提供一个完整版本。
- 混淆预发布后缀中的连字符与连字符范围:范围两侧需要空格,例如 1.2.3 - 2.0.0。
- 认为 includePrerelease 会忽略所有边界,或认为 ^ 对 0.x 和 1.x 的含义相同:请查看规范化比较器分组。
- 将最大匹配输入当成仓库查询结果、兼容性保证或安全建议:本工具不执行这些检查。
限制与说明
- 固定使用 node-semver 7.8.5,loose: false,不自动补全版本。支持 ^、~、<、<=、>、>=、=、连字符范围、x/X/* 通配符和 ||。npm 严格解析不等于仅按 SemVer 规范校验:版本条目允许前缀 v;前缀 = 可作为范围比较器,但版本条目不接受。范围可以使用不完整版本,单独版本条目不能。!= 不受支持;排除 1.2.3 可写为 <1.2.3 || >1.2.3。
- 未启用 includePrerelease 时,预发布版本只有在匹配比较器组中存在相同 major.minor.patch 且带预发布标记的比较器时才有资格匹配。启用后取消这一默认排除规则,但范围边界仍有效,不代表所有预发布版本都会匹配,也可能改变规范化比较器的展开。
- 范围上限为 2,000 字符、32 个 || 分组和 128 个按空白分隔的词元。版本输入上限为 100,000 字符、1,000 个物理行,空白行也计入行数。每个去除两端空白后的版本最多 256 字符。过长的单个版本标为无效;范围无效或范围、列表超过总量限制时停止检查,不返回部分匹配结果。
- 排序遵循 SemVer 优先级,并在规范化匹配结果中保留构建元数据。优先级相同的条目,包括重复版本与不同 +build 后缀,保持输入顺序。最小和最大值仅取自输入中的匹配行,不是仓库版本,也不是范围的理论边界。没有匹配行时两者均为 null。
- 页面及其代码加载后可离线在浏览器本地检查,不访问软件包仓库、不读取已安装依赖树,也不执行软件包代码。匹配不保证 API 兼容性、依赖解析成功、维护状态或安全性。导出的 JSON 包含输入范围及去除两端空白的版本行,包括无效条目;分享前请检查项目私有信息。复制或下载的报告不再受页面控制。
常见问题
为什么 ^0.2.3 不接受 0.3.0?
对于完整的插入符范围,node-semver 允许最左侧非零分量右侧的分量变化。^0.2.3 展开为 >=0.2.3 <0.3.0-0,而 ^0.0.3 展开为 >=0.0.3 <0.0.4-0。这是范围规则,不保证允许的版本实际兼容。
为什么预发布版本的数字足够大,却仍不匹配?
默认预发布门槛独立于普通数字比较。例如,>=1.2.3-beta.2 <1.3.0 接受 1.2.3-beta.4,但在未启用 includePrerelease 时排除 1.2.4-beta.1。开关不会覆盖比较器边界,因此应同时查看开关状态和规范化分组。
“无效”和“不匹配”有什么区别?
无效行无法按本工具的 npm 严格规则解析为完整版本,或超过单个版本的长度上限。不匹配行是有效版本,只是不满足范围或预发布规则。例如,1.2 和 01.2.3 是无效版本条目;2.0.0 有效,但不匹配 ^1.2.3。
构建元数据会影响排序及最小、最大版本吗?
不会。1.2.3+build.2 与 1.2.3+build.1 优先级相同,都会保留并维持输入顺序。最小值取排序后首个匹配行,最大值取最后一个。这些值只描述当前列表,包括同优先级条目的稳定顺序,不会查询最早或最新的已发布版本。