Ruby:自定义 gem 要求其中的模块“需要”

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

don*_*mpa 5

我不知道这是否一定是您的 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)