Bower 使我能够使用以下语法指定包的版本要求:
"dependencies": {
"<name>": "<version>",
},
但我无法找到用于 <version>
的语法是什么。我知道我可以将版本指定为:
- 大于某个版本
">1.0.0"
- 大于或等于一个版本:
">=1.0.0"
- 或者在某个范围内:
"1.0.0 - 2.0.0"
。
我也知道有一个包含波浪号的通用版本语法: "~1.0.0"
。但我不确定它是什么意思以及它是否与 "=1.0.0"
相同。
我也很想知道我是否能够指定多个非连续版本,例如 1.0.3
加上版本大于 1.5.0
等…
原文由 Samuel Hapak 发布,翻译遵循 CC BY-SA 4.0 许可协议
简而言之,Bower 版本号(和 NPM)的语法称为 SemVer,它是“语义版本控制”的缩写。您可以 在 Node/npm 中的 semver 解析器 的 API 上找到 Bower 和 NPM 中使用的 SemVer 详细语法的文档。您可以在 semver.org 上了解有关基础规范( 未 提及 ---
~
或其他语法详细信息)的更多信息。您可以使用一个 超级方便的视觉 semver 计算器,让所有这些更容易理解和测试。
SemVer 不仅仅是一种语法!它有一些非常有趣的关于发布 API 的正确方法的内容,这将有助于理解语法的含义。至关重要的是:
因此,您关于
~
的具体问题与 Major.Minor.Patch 模式有关。 (与相关插入符运算符^
。)您可以使用~
来缩小您愿意接受的版本范围:例如:要指示您将在 1.2.x 树上进行任何后续补丁级别的更改,从 1.2.0 开始,但小于 1.3.0,您可以使用:
这也会为您提供与使用
.x
语法相同的结果:但是,您可以使用 tilde/
~
语法更加具体:如果您只愿意接受 从 1.2.4 开始 但仍低于 1.3.0 的补丁级别更改,那么您使用:向左移动,朝向 主要 版本,如果你使用……
……和……一样
…并匹配任何高于 1.0.0 且低于 2.0 的次要或补丁级别的更改:
请注意上面的最后一个变体:它被称为 ‘caret range’ 。插入符号看起来非常像
>
,因此您可能会认为它表示“任何 大于 1.0.0 的版本”。 (我当然在这一点上滑倒了。)不!插入符范围基本上用于表示您 只 关心最左边的有效数字——通常是主要版本——并且你将允许任何不影响最左边数字的次要或补丁级别的更改。然而,与指定主要版本的波浪号范围不同,插入符号范围允许您指定精确的次要/补丁起点。因此,虽然
^1.0.0 === ~1
插入符号范围如^1.2.3
让你说你将进行任何更改>=1.2.3 && <2.0.0
。你不能用代字号范围来做到这一点。当你近距离观察时,这一切乍一看似乎令人困惑。但是缩小一秒钟,然后这样想: 插入符号只是让你说你最关心最左边的有效数字。波浪号让你说你最关心最右边的数字。 剩下的就是细节了。
波浪号和插入符的表现力解释了为什么人们使用它们比使用更简单的
.x
语法要多得多:它们只是让你做更多。这就是为什么您会看到波浪号经常使用的原因,即使在.x
服务的地方也是如此。作为示例,请参阅 npm 本身:它自己的 package.json 文件包含许多~2.4.0
格式的依赖项,而不是它 可以 使用的2.4.x
格式。通过坚持~
,语法在 70 多个版本化依赖项列表中一直保持一致,无论哪个起始补丁号是可接受的。不管怎样,SemVer 还有更多内容,但我不会在这里详述。在 节点 semver 包的自述文件 中查看。在练习和尝试了解 SemVer 的工作原理时 ,一定要使用 语义版本控制计算器。
RE:非连续版本号:OP 的最后一个问题似乎是关于指定非连续版本号/范围(如果我已经公平地编辑了它)。是的,您可以使用常见的双管道“或”运算符来做到这一点:
||
。像这样: