如何在.rb文件中找出给定Gem的所有依赖项 而不必依赖system()或类似的外部调用?
考虑这个项目:
https://rubygems.org/gems/diamond_shell
它有大约20 - 25个依赖项。
我需要在所有链接上遍历所有依赖项 依赖项,并使用所有这些依赖项填充数组。
编辑:感谢您的回答。
答案 0 :(得分:3)
您可以从lib/rubygems/commands/dependency_command.rb
中抽出代码。这是我制作的一个简单方法。
require 'rubygems/commands/dependency_command'
def get_dependencies name, local = true
cmd = Gem::Commands::DependencyCommand.new
dependency = cmd.gem_dependency name, nil, nil
specs =
if local
dependency.matching_specs.uniq.sort
else
cmd.fetch_remote_specs(dependency).uniq.sort
end
dependencies = []
specs.each do |spec|
dependencies.concat spec.dependencies.sort_by { |dep| dep.name }.map { |dep| [dep.name, dep.requirement] }
end
dependencies
end
puts get_dependencies('diamond_shell', false)
答案 1 :(得分:2)
如果您正在使用Bundler进行ruby gem管理(http://bundler.io),bundle install
运行会生成包含所有项目gem及其依赖项的Gemfile.lock清单文件。一个例子如下:
sunspot (2.0.0)
pr_geohash (~> 1.0)
rsolr (~> 1.0.7)
sunspot_rails (2.0.0)
nokogiri
sunspot (= 2.0.0)
teaspoon (0.7.8)
phantomjs (>= 1.8.1.1)
railties (>= 3.2.5, < 5)
可以轻松解析此文件以获取依赖关系树。