为什么Gem提供〜> AND =>在RubyGems?

时间:2016-08-29 23:51:11

标签: ruby-on-rails ruby rubygems gemfile

https://rubygems.org/gems/bcrypt/versions/3.1.11

的bcrypt宝石

显示了这种用法

gem 'bcrypt', '~> 3.1', '>= 3.1.11'

为什么有两个版本的spermy悲观操作符?

我们通常只为其他宝石使用一个版本

2 个答案:

答案 0 :(得分:3)

'~> 3.1'表示所需的版本可以是3.1.x3.2.x3.3.x或...,但绝不会达到4.0

'>= 3.1.11'的含义非常明确。

所以把它们放在一起,就意味着版本可以是3.x.y x >= 2x = 1 and y >= 11

也许这种表示法更清晰:

gem 'bcrypt', '>= 3.1.11', '< 4'

答案 1 :(得分:2)

>= 3.1.11是一个“乐观”的版本约束。它说来自3.1.11的所有更改都有效,但对于版本4.0.0,这不会是真的。

~> 3.1是“悲观的”。这明确排除了可能破坏您的代码的版本。它基本上是>= 3.1< 4.0。但是如果你有~> 3.1.1,它将等于>= 3.1.1但小于3.2

如果您想允许使用较新的向后兼容版本,但需要特定的错误修复,则可以使用'~> 3.1', '>= 3.1.11'这样的复合要求。详细信息请参见http://guides.rubygems.org/patterns/#pessimistic-version-constraint 如果您要允许使用较新的向后兼容版本但需要特定的错误修复,您可以使用复合要求,例如... '~> 2.2', '>= 2.2.1'