宝石规格中的
~>
版本要求是什么意思?
hanna-0.1.12 取决于 [haml (~> 2.2.8)]
RubyGems 手册称其为 悲观版本约束.
假设您指定了 n 部分版本号,例如
1.3
(2 部分)或
3.5.6.2
(4 部分)作为约束。那么,为了满足约束条件,
版本号必须满足以下两个条件
版本号的前n-1部分必须与前n-1部分相同 约束的一部分 (例如
1.x
或 3.5.6.x
匹配,但 0.x
或 3.5.7.x
不匹配)和版本号的最后部分必须大于或等于最后部分 约束的一部分 (例如
1.9999
和 3.5.6.2
匹配,但 1.2
或 3.5.6.1
不匹配)。换句话说
~> x1.x2.x3。 … .xn-2.xn-1.xn
比赛
x1.x2.x3。 … .xn-2.xn-1.y, y >= xn
这被称为“悲观”约束的原因,也是 当你只是说
> x.y.z
时,你就是乐观的:你假设
从现在开始,直到永远,API 永远不会改变。这
这当然是一个相当大胆的假设。然而,大多数项目都有关于
当他们被允许时
破坏向后兼容性,
以及当他们do向后中断时如何更改版本号
兼容性。您可以使用悲观的方法对这些版本编号规则进行编码
约束,因此您可以确定您的代码将始终继续工作
(假设其他项目的作者实际上坚持他自己的
规则,不幸的是情况并非总是如此)。
换句话说,您可以使用此符号让您的 gem 保持所有次要更新的更新,并避免进行可能破坏您的应用程序的重大更新。
例如“~> 1.2”会将您的 gem 更新到 1.3(如果发布了这样的版本),但不会将其更新到 2.0
我认为 bundler 文档 最好总结一下:
说明符 ~> 具有特殊含义,最好通过示例来说明。 ~> 2.0.3 与 >= 2.0.3 相同,< 2.1. ~> 2.1 与 >= 2.1 相同,< 3.0. ~> 2.2.beta 将匹配预发布版本,如 2.2.beta.12。
~>:只允许最右边的版本组件递增。这种格式称为悲观约束运算符。例如,要允许在特定次要版本中发布新补丁,请使用完整版本号:
~> 1.0.4:允许 Terraform 安装 1.0.5 和 1.0.10,但不允许安装 1.1.0。
~> 1.1:允许 Terraform 安装 1.2 和 1.10,但不允许安装 2.0。
来源:https://developer.hashicorp.com/terraform/language/expressions/version-constraints
它匹配具有相同主要/次要部分的任何版本。这意味着在这种情况下 haml ~> 2.2.8 将匹配任何 2.2.x 版本。
这可以用来确保新 gem 中的 API 破坏性更改不会导致依赖于新的但已更改的 gem,在这种情况下会破坏 Hanna。