【问题标题】:Eliminate many require_relatives in the ruby project消除ruby项目中的许多require_relatives
【发布时间】:2012-02-23 10:04:01
【问题描述】:
ruby 项目中通常有 lib、bin 和 spec(或 test)文件夹(至少在生成的 gem 中)。现在在 lib 中的每个文件中都有许多 require_relative 导入,并且在规范(或测试)文件中也有丑陋的 require_relative '../lib/some_files' 。有没有办法消除所有这些 require_relative 进口?我认为 FILE 有一些技巧,但我不知道到底是哪一种。
【问题讨论】:
标签:
ruby
file
import
require
【解决方案1】:
你可以这样做:
current_folder = File.expand_path('../', __FILE__) # get absolute directory
Dir["#{current_folder}/subfolder/**/*.rb"].each {|f| require f}
这将需要当前目录子文件夹中的所有文件。你也可以使用require_relative,因为它是内核函数,没什么特别的。
但是,如果这些文件相互依赖并且必须按定义的顺序加载,那么您将必须按照定义的顺序手动指定require/require_relative。
此外,如果您需要消除 spec 和 lib 中的 require 重复,那么您可以这样:将具有顶级命名空间名称的文件添加到 /lib 文件夹的根目录,然后从此处需要嵌套文件需要来自/spec/spec_helper.rb 的单个文件:
# /lib/coolgem.rb
module CoolGem; end
current_folder = File.expand_path('../', __FILE__)
Dir["#{current_folder}/coolgem/*.rb"].each {|f| require f}
# /spec/spec_helper.rb
require_relative '../lib/coolgem'
这是一个简化的示例,您可以为每个嵌套模块等设置这样的初始化文件。