26

您列出宝石的顺序重要吗?这两个块是等价的吗?

gem 'carrierwave'
gem 'rmagick'

gem 'rmagick'
gem 'carrierwave'
4

2 回答 2

15

当您使用时Bundle.require(Rails 会这样做),Gems 需要按照它们在 Gemfile 中出现的顺序。In 并不总是这样,但已经有一段时间了

由于 Carrierwave 在需要时明确需要 RMagick,因此我认为这对您而言并不重要;但严格来说,这两个块并不等价。

于 2013-05-23T23:08:35.760 回答
10

Bundler 不会按照您列出它们的顺序加载 gem 依赖项*,但它确实使用以下标准按源优先级:

  1. 显式路径或 git 选项附加到 gem 依赖项,例如:

    gem 'some-gem', github: 'somebody/some-gem'
    
  2. 为其他 gem 依赖项隐式需要的 gem 显式定义的依赖项,即gem 'actionmailer'gem 被隐式需要gem 'rails'

  3. 如果您添加了多个来源,它将从最后一个搜索到第一个。

https://bundler.io/man/gemfile.5.html#SOURCE-PRIORITY


编辑:根据马特的回答,取决于你想要做什么(或者你正在加载什么宝石),订单可能很重要。请参阅即使使用 bundler,您的宝石订单也可能很重要

于 2013-05-23T22:23:39.327 回答