Kom*_*ave 3 ruby gem module require
我已经构建了一个自定义的 Ruby gem。调用它MyGem,然后文件lib/innermodule.rb包含:
module MyGem
module InnerModule
def self.foo(); puts "Hello world!"; end
end
end
Run Code Online (Sandbox Code Playgroud)
要从另一个正在开发的 gem 中引用它,我必须这样做:
require 'mygem'
require 'innermodule'
Run Code Online (Sandbox Code Playgroud)
这是正常行为,还是 gemspec 有问题MyGem?
我不知道这是否一定是您的 gemspec 的问题,因为您通常只指定要包含在 gem 中的文件。Gemspecs 与 gem 进入另一个应用程序的方式没有任何关系。
这听起来像是您的 gem 构建/打包方式的问题,特别是在命名和文件路径约定方面。
构建 gems 通常遵循一些常见的约定以及我在上面引用的内容
http://guides.rubygems.org/patterns/有一个很好的概述。
基本上,您通常希望创建一个位于“lib”目录中的单个文件(通常是您的 gem 的名称)。在这种情况下,“lib/mygem.rb”将对 gem 的内部依赖项有单独的要求。
#lib/mygem.rb
require 'innermodule'
Run Code Online (Sandbox Code Playgroud)
然后在任何其他应用程序中包含 gem(以及内部模块),你可以这样做
require 'mygem'
Run Code Online (Sandbox Code Playgroud)