为什么要将开发依赖项添加到gemspec中?



rubygems想要知道我的开发依赖项是什么,这似乎是一个奇怪的功能,到目前为止,我从未见过它用于在运行gem测试时实际加载这些

如果有人出于某种原因决定破解你的gem,例如他们在Github上分叉它以添加一个功能(他们可能想贡献),如果他们知道你的gem需要什么开发依赖(例如测试框架,mock工具等),这将有所帮助。

如果你在gemspec命令中使用捆绑器,当你运行

时,它将钩入你的gemspec依赖项,并将开发依赖项与运行时依赖项一起安装。
bundle install

这样你就不用手动安装这些gem了。

gem命令还可以列出gem的所有依赖项,包括开发依赖项:

gem dependency my_gem
Gem my_gem-0.1.3
  activerecord (~> 3.0.0)
  json (~> 1.4.3, development)
  rake (>= 0, development)
  rspec (~> 2.5.0, development)
  ruby-openid (~> 2.1.0)

再说一遍,这可能更适合别人而不是你自己。

我的宝石通常进行单元测试。这个测试有时需要宝石,这是不需要使用宝石。或者你可能需要额外的宝石来生成宝石的一部分。


有一次我误用了开发依赖来定义"可选依赖"(依赖对于我的gem的某些特定功能是必需的,但对于"正常"使用来说不是必需的)。

的例子:我的应用程序提供了导出为文本或pdf文件的可能性。pdf生成使用对虾。因此,prawn是一个依赖项,但它不是使用应用程序所必需的,只有特定的功能需要它。

所以我没有将prawn添加到gem依赖项(这是不必要的),而是添加到开发依赖项(它对gem很有用)。

RubyGems对这个问题的文档回答如下:

开发依赖关系是有用的,当有人想要做修改你的宝石。当您指定开发依赖项时,另一个开发人员可以运行gem install——dev your_gem, RubyGems会这样做获取两组依赖项(运行时和开发)。典型的开发依赖包括测试框架和构建系统。

例如,我可以指定spec.add_development_dependency 'minitest'

gem install命令中添加--dev标志将自动拉入minitest gem。这个特性使另一个开发人员不必手动识别和安装开发所需的gem。

最新更新