2012-01-31 42 views
1

通常在ruby項目中至少有lib,bin和spec(或test)文件夾(至少在生成的gem中)。現在在lib中的每個文件中有很多require_relative導入,並且spec(或test)文件中的require_relative'../lib/some_files'也很醜。有沒有辦法消除所有那些require_relative進口?我認爲有一些與文件伎倆,但我不知道確切的。消除ruby項目中的許多require_relatives

回答

3

你可以做這樣的事情:

current_folder = File.expand_path('../', __FILE__) # get absolute directory 
Dir["#{current_folder}/subfolder/**/*.rb"].each {|f| require f} 

這將需要在當前目錄下的子文件夾中的所有文件。你也可以使用require_relative,因爲它是內核函數,沒什麼特別的。

但是,如果這些文件相互依賴並且必須以定義的順序加載,那麼您將不得不按照定義的順序手動指定require/require_relative


此外,如果你需要消除需要規範和lib重複,那麼你就可以走這條路:與頂級命名空間的名稱添加文件到您的/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' 

這是簡化的例子,你可以爲每個嵌套模塊等這樣的初始化文件