我正在编辑一个 gem,其中有通常的 require 命令,指向加载的 gem(我正在谈论的 gem 称为 nirvana ,其中的文件包含 require 'nirvana'require 'nirvana/shell' 等)。

当我使用应用程序的 bin 文件( /mypath/nirvana/bin/nirvana )时,我希望写入其中的 require 'nirvana' 命令指向该 gem 本地分支中的文件(我正在编辑的文件),并且我不想加载原始文件必杀技 gem,与经典的 gem install 一起安装。

我不想用所有 require 'nirvana' 命令替换

require File.dirname(File.expand_path(__FILE__)) + '/../lib/nirvana.rb'

...这将解决我的问题,但它很难看!有没有办法不加载 nirvana gem,并使 require 'nirvana' 加载我的库(也许将它们添加到 $LOAD_PATH ...)?

最佳答案

如果您是从 gems 二进制可执行文件中这样做的,那么您应该只“需要”一次 nirvana.rb。所以这条线只需要出现一次。看到它出现在这些文件中是很常见的。

请注意,您的示例可以更好地编写为

require File.expand_path('../lib/nirvana.rb', __FILE__)

由于 File::expand_path 需要一个可选的第二个参数(目录字符串)。

许多作者还会在执行二进制文件之前将 lib 目录移动到 $LOAD_PATH 中,以便在尝试加载任何已安装的 gem 之前加载本地文件。

关于Ruby - 使用 `require` 命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5058792/

10-12 07:33