'require bundler' 和 'require bundler/setup' 之间的区别

Difference between 'require bundler' and 'require bundler/setup'

当我使用

require 'bundler/setup' 

我得到 Bundler.with_clean_env 不被支持。

但是当我将其更改为

require 'bundler' 

支持Bundler.with_clean_env。这里引起的困惑是要求 'bundler''bundler/setup' 之间的区别是什么?

当引用 gem 时,require 'foo' 需要位于 gem 的 lib 中的 foo.rb file目录。该文件通常与 gem 同名,并负责要求 gem 运行所需的所有其他必要文件。

当您执行 require 'foo/bar' 时,您会搜索 lib/foo/bar.rb。换句话说,您只需要 gem 中的特定 file 而不是全部。


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

Gemfiles 可以包含 groups,例如 :test:development

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

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

来自documentation

Configure the load path so all dependencies in your Gemfile can be required

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

Only add gems from specified groups to the load path. If you want the gems in the default group, make sure to include it

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