我是Ruby世界的新手,并开始构建我的第一个Ruby gem。
我注意到需求与我预期的完全不同。假设我在gem中有以下脚本
- My Gem
- lib
script-1.rb
script-2.rb
script-3.rb
...
main.rb
+ bin
+ exe
...
在exe文件中,我校准了main.rb-我的宝石的主要入口点。
它使用script-1.rb中的类来完成其工作。 script-1.rb代表它取决于代码script-2.rb。依此类推。
这是我的问题。
哪里是require
脚本的最佳位置。主要从可维护性的角度来看。假设在我的可执行文件有效期内,所有脚本都将被加载。我看到2个选项:
require
在main.rb中我的应用程序的所有脚本require
。我开始使用选项2。但是很快我就知道,require进行了全局修改,并且某些脚本丢失了require
,因为其他一些脚本已经这样做了。
那么这里的最佳实践是什么。我宁愿创建一个单独的脚本来进行初始化-就像定义我的gem的依赖关系一样,但是我想知道是否还有更好的方法?您如何描述宝石中脚本之间的相似度?
答案 0 :(得分:2)
如果您的宝石不适用于Bundler,请声明:
gem 'mygem'
然后您必须在文档中解释原因。出于难以解决的技术原因,某些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'