版本要求中波形符大于(~>)的含义?

问题描述 投票:0回答:5

宝石规格中的

~>
版本要求是什么意思?

hanna-0.1.12 取决于 [haml (~> 2.2.8)]
ruby rubygems
5个回答
122
投票

RubyGems 手册称其为 悲观版本约束.

假设您指定了 n 部分版本号,例如

1.3
(2 部分)或
3.5.6.2
(4 部分)作为约束。那么,为了满足约束条件, 版本号必须满足以下两个条件

  1. 版本号的前n-1部分必须与前n-1部分相同 约束的一部分 (例如

    1.x
    3.5.6.x
    匹配,但
    0.x
    3.5.7.x
    不匹配)

  2. 版本号的最后部分必须大于或等于最后部分 约束的一部分 (例如

    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向后中断时如何更改版本号 兼容性。您可以使用悲观的方法对这些版本编号规则进行编码 约束,因此您可以确定您的代码将始终继续工作 (假设其他项目的作者实际上坚持他自己的 规则,不幸的是情况并非总是如此)。


26
投票

换句话说,您可以使用此符号让您的 gem 保持所有次要更新的更新,并避免进行可能破坏您的应用程序的重大更新。

例如“~> 1.2”会将您的 gem 更新到 1.3(如果发布了这样的版本),但不会将其更新到 2.0


19
投票

我认为 bundler 文档 最好总结一下:

说明符 ~> 具有特殊含义,最好通过示例来说明。 ~> 2.0.3 与 >= 2.0.3 相同,< 2.1. ~> 2.1 与 >= 2.1 相同,< 3.0. ~> 2.2.beta 将匹配预发布版本,如 2.2.beta.12。


0
投票

~>:只允许最右边的版本组件递增。这种格式称为悲观约束运算符。例如,要允许在特定次要版本中发布新补丁,请使用完整版本号:

~> 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


-1
投票

它匹配具有相同主要/次要部分的任何版本。这意味着在这种情况下 haml ~> 2.2.8 将匹配任何 2.2.x 版本。

这可以用来确保新 gem 中的 API 破坏性更改不会导致依赖于新的但已更改的 gem,在这种情况下会破坏 Hanna。

© www.soinside.com 2019 - 2024. All rights reserved.