Ruby 在使用bundler时,在gempec中声明开发依赖项是否仍然有用?
我正在研究一种新的红宝石。我熟悉使用Bundler管理gems:Ruby 在使用bundler时,在gempec中声明开发依赖项是否仍然有用?,ruby,rubygems,bundler,Ruby,Rubygems,Bundler,我正在研究一种新的红宝石。我熟悉使用Bundler管理gems: source "https://rubygems.org" gemspec gem 'rspec-rails' 我熟悉在gemspec文件中指定依赖项: Gem::Specification.new do |s| # ... s.add_dependency "rails", "~> 4.1.5" end 生成的Gemfile提到,当我准备发布时,应该将依赖项声明从Gemfile移动到gempec # Dec
source "https://rubygems.org"
gemspec
gem 'rspec-rails'
我熟悉在gemspec文件中指定依赖项:
Gem::Specification.new do |s|
# ...
s.add_dependency "rails", "~> 4.1.5"
end
生成的Gemfile提到,当我准备发布时,应该将依赖项声明从Gemfile移动到gempec
# 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.
我为什么要这么做?为什么我的gempec应该关心我在开发中使用的gems?
development\u dependency
的作用是什么,Bundler还没有为我做什么?为了最好地回答您的问题,我们应该首先理清Bundler和Rubygems的概念。我认为这是一个很好的解释
为什么我要[将依赖项从Gemfile移动到.gempec]?
Gemfile不仅允许您指定依赖项,还允许您指定。当您同时处理依赖项本身并且需要指向Git repo(或其他东西)时,这非常有用
完成这些依赖项的工作后,Rubygem约定要求您将这些已发布gem上的依赖项声明移动到.gempec文件中。添加一行gemspec
告诉Bundler从这个传统的Rubygems位置读取数据。如果您正在处理一个gem,并且没有积极开发gem的依赖项,那么所有依赖项都应该在.gempec中声明
为什么我的gempec应该关心我在开发中使用的gems?
从中为添加开发依赖项:
默认情况下不会安装开发依赖项,并且在需要gem时不会激活开发依赖项
此Rspec的一个流行示例。通常,您应该将Rspec声明为自己的开发依赖项,但不要强迫其他人在获取您的gem时下载它。请注意,您引用的评论中没有说“开发依赖项”,而是说“开发中的依赖项”。开发中的依赖项通常包括直接从Git repo安装的gems的尖端版本。RubyGems无法从Git回购中安装gems;然而,Bundler可以。如果您正在安装从RubyGems无法处理的源(如VCS回购)安装的gems的尖端版本,则应将其列在Gemfile
中,而不是.gemPec
文件中。您是对的。谢谢你澄清这一点。我仍然不确定是否首选在GemPec中声明开发依赖项,或者这种做法是否已被Bundler所取代。@Andrew:您仍然应该在GemPec中声明开发依赖项,以便可以通过RubyGems安装它们。我认为在安装gem时不会安装开发依赖项。这不是真的吗?@Andrew:默认情况下不是,但也可以选择。