4

Rubygems 没有提供正确的方法来为不同的 ruby​​ 版本指定不同的依赖项。如果我们在 gemspec 中添加条件,它可以切换安装的内容:

if RUBY_VERSION < "1.9"
  # ruby 1.8 only supports nokogiri < 1.6
  s.runtime_dependency "nokogiri", ">= 1.4.0", "< 1.6"
else
  s.runtime_dependency "nokogiri", ">= 1.4.0"
end

但是,这并不能控制加载的内容。如果加载路径中有更新的版本,即使它与 ruby​​ 1.8 不兼容,它也会被加载。

我不确定这是否真的是一个问题:如果您使用的是 rbenv/rvm 等,那么每个 ruby​​ 都有不同的 gem 路径,所以希望您永远不会将两者都安装在同一个地方。我认为即使是标准 gem 路径也按兼容性版本(1.8 / 1.9.1)划分。这是为了解决这个问题,还是你会遇到两个版本一起安装的情况?

另一种方法是让 gemspec 保持开放式(没有条件),并警告用户在需要时在 Gemfile 中设置正确的版本约束。

哪种方式更可取?

4

1 回答 1

0

我相信这正是 bundler 和 requires gems 工作的本质。这是 rvm 等工具的一大优势。

于 2015-10-02T05:37:17.503 回答