我可以根据命令行输入为gem指定动态依赖项吗?

时间:2011-05-26 00:10:27

标签: ruby gem gemspecs

简介:我正在开发一个gem,默认情况下会从某些XML数据中提取信息并对文档进行某种处理。我正在使用nokogiri来解析XML。但是,我希望允许用户自己解析XML并传递必要的信息以便我的数据处理方法运行,以防他们不想安装nokogiri或已经解析了XML。

问题:有没有办法允许用户在gem安装期间指定他们不希望安装nokogiri依赖项?例如(这里非常浪漫),

gem install crazy_gem --no-nokogiri

并且在gemspec中可能类似

Gem::Specification.new do |s|
  ...
  s.add_dependency 'nokogiri' unless Proc.new { install_flags('no-nokogiri') }
  ...
end

[编辑]我不想过多地关注上面的gemspec代码,因为我知道它不起作用 - 它只是我想要的那种东西的一个例子做。 [/编辑]

gem install crazy_gem --ignore-dependencies效果很好,直到有其他依赖项。

2 个答案:

答案 0 :(得分:3)

我认为你不能完全按照你所追求的目标行事,但如果你重新定义你的宝石所做的事情,那么就有可行的解决办法。而不是默认情况下解析某些XML并处理数据的gem,而是可选地允许您传入预解析的数据,而主要关注处理的gem如何,但可选地会为您解析XML(如果你有Nokogiri)。

要做到这一点,只需将Nokogiri从您的gemspec依赖项中删除(您可以将其添加为development dependencyrequirement)。

在您的代码中,请务必仅使用require 'nokogiri'begin..end块中调用rescue LoadError,然后根据需要进行处理。

答案 1 :(得分:0)

Gemspecs在构建时被转换为静态文件,因此不起作用。您可以尝试使用绕过依赖性检查的-f