需要子目录中的所有文件
Posted
技术标签:
【中文标题】需要子目录中的所有文件【英文标题】:Require all files in sub-directory 【发布时间】:2011-05-30 12:06:07 【问题描述】:我有以下目录树。
- app.rb
- folder/
- one/
- one.rb
- two/
- two.rb
我希望能够加载文件夹/目录中的 Ruby 文件,甚至是子目录中的文件。我该怎么做?
【问题讨论】:
***.com/questions/735073/… 的副本。使用 require_all gem 并在one.rb
中执行require 'require_all'; require_rel 'one'
。
【参考方案1】:
在我的项目中,这会评估为["./fixset.rb", "./spec/fixset_spec.rb", "./spec/spec_helper.rb"]
,这会导致我的规范运行两次。因此,这是一个经过调整的版本:
Dir[File.join(".", "**/*.rb")].each |f| require f unless f[/^\.\/spec\//]
这将安全地忽略 ./spec/
中的所有 *.rb 文件
【讨论】:
【参考方案2】:试试这个:
Dir.glob(File.join(".", "**", "*.rb")).each do |file|
require file
end
【讨论】:
这将在 Ruby 1.9.2+ 上中断,因为 '.'不再是 requires 搜索路径的一部分。显式前导 '.'或require_relative
是必需的。
@Phrogz 感谢您的提醒。 :)【参考方案3】:
代码更少,但仍可在 Linux、OS X 和 Windows 上运行:
Dir['./**/*.rb'].each |f| require f
在当前目录不再是路径的一部分的 Ruby 1.9.2 中需要'.'
。
【讨论】:
【参考方案4】:Jekyll 对其插件做了类似的事情。像这样的东西应该可以解决问题:
Dir[File.join(".", "**/*.rb")].each do |f|
require f
end
【讨论】:
如果您有继承,您需要对所需的文件进行排序,以便首先需要***类。 Dir[File.join("#Rails.root/app/classes", "*/.rb")].sort_by |path| path.split("/").length .each 做 |f|要求结束以上是关于需要子目录中的所有文件的主要内容,如果未能解决你的问题,请参考以下文章