【发布时间】:2017-04-18 04:43:24
【问题描述】:
我注意到对于某些 gem,您必须将其包含在要使用它的文件中,例如 require 'a_gem',但并非总是如此。
我要自己创作一颗宝石。使用时不想在.rb文件中添加require 'my_gem'怎么办?
【问题讨论】:
-
什么意思?您应该始终需要宝石才能使用它。但是您可以在一个文件中要求 gem 并在另一个文件中使用它。
我注意到对于某些 gem,您必须将其包含在要使用它的文件中,例如 require 'a_gem',但并非总是如此。
我要自己创作一颗宝石。使用时不想在.rb文件中添加require 'my_gem'怎么办?
【问题讨论】:
通常,使用 gem 的应用程序需要 gem:
require "my_awesome_gem"
MyAwesomeGem.do_something_great
但是,如果一个应用程序使用bundler,它在一个名为“Gemfile”的文件中定义了应用程序的 gem:
source 'http://rubygems.org'
gem 'my_awesome_gem'
然后应用程序可能会以自动需要 Gemfile 中指定的所有 gem 的方式调用 bundler:
require "bundler"
Bundler.require
MyAwesomeGem.do_something_great
Rails 项目使用Bundler.require,因此 Rails 应用程序不需要明确要求 gem 来使用它:只需将 gem 添加到 Gemfile 即可。
有关Bundler.require的更多信息,请参阅bundler documentation
有关 Rails 如何使用 Bundler 的更多信息,请参阅 Justin Weiss 的 How Does Rails Handle Gems?。
【讨论】:
这没有意义。如果您想编写 Gem 并使用它,则需要在某个地方使用它。
这个“某处”可能在您的一个脚本中是明确的,它可以写在 Gemfile 中,或者您的脚本所需的另一个脚本/gem 可能需要它。
如果您编写 gem,Ruby 不会自动将它包含在您的所有脚本中。
最后,如果你发布它,地球上的每一个 Ruby 脚本都应该神奇地需要它并执行你的代码吗?
我想你看到的没有使用require 'a_gem' 的项目使用的是 Gemfile。
【讨论】: