使用捆绑器时在 gemspec 中声明开发依赖项仍然有用吗?

2024-02-13

我正在研究一种新的红宝石宝石。我熟悉使用 Bundler 来管理 gem:

source "https://rubygems.org"

gemspec

gem 'rspec-rails'

我熟悉在 gemspec 文件中指定依赖项:

Gem::Specification.new do |s|
  # ...
  s.add_dependency "rails", "~> 4.1.5"
end

生成的 Gemfile 提到,当我准备好发布时,我应该将依赖项声明从 Gemfile 移至 gemspec。

# Declare any dependencies that are still in development here instead of in
# your gemspec. These might include edge Rails or gems from your path or
# Git. Remember to move these dependencies to your gemspec before releasing
# your gem to rubygems.org.

我为什么要这样做?为什么我的 gemspec 应该关心我在开发中使用的 gem?有何目的development_dependencyBundler 还没有为我提供服务吗?


为了最好地回答您的问题,我们应该首先理清 Bundler 和 Rubygems 的概念。我认为一个很好的解释是在这里找到 http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/.

为什么我想要[将依赖项从 Gemfile 移至 .gemspec]?

Gemfile 不仅允许您指定依赖项,还允许您指定依赖从何而来 http://bundler.io/git.html。当您还在处理依赖项本身并且需要指向 Git 存储库(或其他内容)时,这非常有用。

一旦完成这些依赖项的工作,Rubygem 约定就要求您将这些已发布的 gem 上的依赖项声明移至您的 .gemspec 文件中。添加一行gemspec告诉 Bundler 从这个传统的 Rubygems 位置读取。如果您正在开发 gem,并且没有积极开发 gem 的依赖项,那么所有依赖项都应该在您的 .gemspec 中声明

为什么我的 gemspec 应该关心我在开发中使用的 gem?

From the docs http://guides.rubygems.org/specification-reference/ for add_development_dependency:

默认情况下不会安装开发依赖项,并且在需要 gem 时也不会激活。

此 Rspec 的一个流行示例。您通常应该将 Rspec 声明为自己的开发依赖项,但不要强迫其他人在获取您的 gem 时下载它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用捆绑器时在 gemspec 中声明开发依赖项仍然有用吗? 的相关文章

随机推荐