【问题标题】: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'
    

    这是一个简化的示例,您可以为每个嵌套模块等设置这样的初始化文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-04
      • 2017-06-15
      • 2017-06-14
      • 2012-09-25
      • 2012-02-24
      • 2023-03-09
      • 2011-12-10
      • 1970-01-01
      相关资源
      最近更新 更多