‘require bundler’和’require bundler / setup’之间的区别

我用的时候

require 'bundler/setup' 

我得到Bundler.with_clean_env不受支持。

但是,当我改变它

 require 'bundler' 

它支持Bundler.with_clean_env 。 这里出现的混乱是需要'bundler''bundler/setup'之间的区别是什么?

在引用gems时, foo.rb require 'foo'将需要位于gem的lib目录中的foo.rb 文件 。 该文件通常与gem名称相同,并且负责要求gem的所有其他必要文件才能运行。

当你require 'foo/bar' ,你会搜索lib/foo/bar.rb 换句话说,您只需要来自该gem的特定文件而不是整个文件 。


bundler/setup负责加载Gemfile中描述的所有gem。 Bundler.with_clean_env是一个完全不同的function,在gem的主文件中定义 。

Gemfiles可以包括以下组 :test:development

  • require 'bundler/setup'包含Gemfile中的所有组。

  • 另一方面, Bundler.setup require 'bundler'允许您指定(通过Bundler.setup )要包含的组。

从文档 :

配置加载路径,以便可能需要Gemfile中的所有依赖项

 require 'rubygems' require 'bundler/setup' require 'nokogiri' 

仅将指定组中的gem添加到加载路径。 如果您想要默认组中的gem,请确保包含它

 require 'rubygems' require 'bundler' Bundler.setup(:default, :ci) require 'nokogiri'