在 Ruby Gem 中描述脚本依赖关系的最佳方式 - 我应该在哪里要求?

Best way to describe the script dependencies in a Ruby Gem - where should I require?

我是 Ruby 世界的新手,开始构建我的第一个 Ruby gem。

我注意到 require 与我预期的完全不同。假设我的 gem

中有以下脚本
-  My Gem
  -  lib
       script-1.rb
       script-2.rb
       script-3.rb
       ...
       main.rb
  + bin
  + exe
  ...

在 exe 中,我调用 main.rb - gem 的主要入口点。

它使用来自脚本 1.rb 的 class 来完成它的工作。 script-1.rb代表它依赖代码script-2.rb。等等。

这是我的问题。

哪里是 require 脚本的最佳位置。主要是从可维护性的角度。假设在我的可执行文件的生命周期内,所有脚本都将被加载。我看到 2 个选项:

  1. require main.rb
  2. 中我的应用程序的所有脚本
  3. 每个脚本 require 仅对其依赖的脚本执行。
  4. 引入新的启动脚本

我开始使用选项 2。但很快我就明白 require 会进行全局修改并且缺少一些脚本 require 因为其他一些脚本已经这样做了。

那么这里的最佳做法是什么。我宁愿为初始化创建一个单独的脚本——比如定义我的 gem 的依赖关系,但我想知道是否有更好的方法我错过了?您如何描述 gem 中脚本之间的礼节?

如果您的 gem 不能与开箱即用的 Bundler 一起工作,请声明:

gem 'mygem'

然后你必须在文档中解释原因。某些 gem 出于棘手的技术原因,要求您加载特定文件,或建议在某些情况下加载。 Bundler 本身就是这样一个 gem:

require 'bundler/setup'

这不仅会加载 Bundler,还会启动 Bundler 环境设置并导入 Gemfile 设置。

通常你的 gem 应该有一个与 gem 本身同名的主库文件,它负责加载所有依赖项。

例如,mygem 看起来像:

mygem.rb
mygem/some_module.rb
mygem/other_module.rb

主要 mygem 看起来像:

module MyGem
  # ...
end

require_relative './mygem/some_module'
require_relative './mygem/other_module'

require 调用是有序的,以便正确考虑任何依赖项。

如果您的模块有自己的其他依赖项,则模式会重复,如 mygem/submodule.rb:

module MyGem::Submodule
  # ...
end

require_relative './submodule/something'