1

简介:我正在开发一个 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在有其他依赖项之前工作得很好。

4

2 回答 2

3

我不认为你可以完全按照你的要求去做,但是如果你重新定义你的 gem 的功能,就有可能的解决方案。与默认情况下解析一些 XML 并处理数据,但可选地允许您传入预解析数据的 gem 不同,一个主要关注处理但可选地为您解析 XML 的 gem 怎么样(如果你有Nokogiri)。

为此,只需将 Nokogiri 排除在 gemspec 依赖项之外(您可以将其添加为开发依赖项或要求)。

在你的代码中,确保你只调用require 'nokogiri'一个begin..end带有 a 的块rescue LoadError并适当地处理它。

于 2011-05-26T23:30:47.390 回答
0

Gemspecs 在构建时被转换为静态文件,所以这是行不通的。您可以尝试使用-fwhich 绕过依赖项检查。

于 2011-05-26T00:42:08.420 回答