简介:我正在开发一个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
效果很好,直到有其他依赖项。
答案 0 :(得分:3)
我认为你不能完全按照你所追求的目标行事,但如果你重新定义你的宝石所做的事情,那么就有可行的解决办法。而不是默认情况下解析某些XML并处理数据的gem,而是可选地允许您传入预解析的数据,而主要关注处理的gem如何,但可选地会为您解析XML(如果你有Nokogiri)。
要做到这一点,只需将Nokogiri从您的gemspec依赖项中删除(您可以将其添加为development dependency或requirement)。
在您的代码中,请务必仅使用require 'nokogiri'
在begin..end
块中调用rescue LoadError
,然后根据需要进行处理。
答案 1 :(得分:0)
Gemspecs在构建时被转换为静态文件,因此不起作用。您可以尝试使用绕过依赖性检查的-f
。