Gemfile中gem的顺序是否有所不同?

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

gem 'carrierwave' gem 'rmagick' 

 gem 'rmagick' gem 'carrierwave' 

当您使用Bundle.require (Rails确实如此)时,Gems按照它们在Gemfile中出现的顺序是必需的。 并不总是这样,但这种方式已经有一段时间了 。

由于Carrierwave在需要时明确要求RMagick,我认为这不重要; 但严格来说,两个街区并不相同。

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

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

     gem 'some-gem', github: 'somebody/some-gem' 
  2. 明确定义gem的依赖关系,否则需要隐式地从其他gem依赖关系中获取,即gem 'actionmailer'gem是gem 'actionmailer'隐式要求gem 'rails'

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

请参见http://gembundler.com/v1.3/man/gemfile.5.html#SOURCE-PRIORITY


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