~>
在 gem 规格中的版本要求意味着什么?
hanna-0.1.12 依赖于 [haml (~> 2.2.8)]
~>
在 gem 规格中的版本要求意味着什么?
hanna-0.1.12 依赖于 [haml (~> 2.2.8)]
1.3
(2部分)或3.5.6.2
(4部分)作为约束条件。那么,为了满足约束条件,版本号必须同时满足以下两个条件: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将永远不会改变,这当然是一个相当大胆的假设。但是,大多数项目都有规则,规定何时允许它们破坏向后兼容性,以及当它们确实破坏向后兼容性时如何更改版本号。你可以使用悲观约束来编码这些版本编号规则,因此你可以确信你的代码将始终继续工作(假设另一个项目的作者实际上遵循自己的规则,不幸的是这并不总是情况)。我认为最好地概括了这一点:
符号"~>"有特殊含义,最好通过示例来说明。 ~> 2.0.3等同于>= 2.0.3且< 2.1。~> 2.1 等同于 >= 2.1且< 3.0。~> 2.2.beta将匹配类似2.2.beta.12的预发行版本。
它匹配具有相同主/次版本号的任何版本。这意味着在这种情况下,haml〜>2.2.8将匹配任何2.2.x版本。
这可用于确保新宝石中的API破坏性更改不会导致依赖于那个已更改的新宝石,从而在这种情况下会破坏hanna。