简介:我正在开发一个 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
[edit] 我不想过多地关注上面的 gemspec 代码,因为我知道它不起作用——它只是我想要的那种东西的一个例子做。 [/编辑]
gem install crazy_gem --ignore-dependencies
在有额外的依赖关系之前效果很好。
最佳答案
我认为您无法完全按照自己的意愿行事,但如果您重新构建 gem 的行为,则有可能的解决方案。默认情况下解析一些 XML 并处理数据,但可选地允许您传入预解析数据的 gem 不是主要与处理有关的 gem,而是可选地为您解析 XML(如果你有 Nokogiri)。
要做到这一点,只需将 Nokogiri 排除在您的 gemspec 依赖项之外(您可以将其添加为 development dependency 或 requirement)。
在您的代码中,确保您只在 begin..end
block 中使用 rescue LoadError
调用 require 'nokogiri'
并处理视情况而定。
关于ruby - 我可以根据命令行输入为我的 gem 指定动态依赖项吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6132409/