【问题标题】:How to work with gemspec add_runtime_dependency and `bundle install`如何使用 gemspec add_runtime_dependency 和 `bundle install`
【发布时间】:2020-10-22 16:26:11
【问题描述】:

我有一个代码库,其中有一个 gemspec 文件,例如:

require "rubygems"
::Gem::Specification.new do |specification|
  specification.add_development_dependency "yard", "~> 0.9"
  specification.add_runtime_dependency "dry-validation", "~> 0.13"
end

bundle install 将安装这两种依赖类型。所以我只想为我的 CI 脚本安装运行时依赖项。我看到bundle install --with <group> 存在,但我没有群组。交互式运行,返回的规范有一个从.groups 返回的空结果。我很想把这两个世界合理化。我必须为每个 gem 依赖项显式添加一个组吗? add_runtime_dependency 和 add_development_dependency 有什么不同吗?

【问题讨论】:

    标签: ruby bundle bundler gemspecs


    【解决方案1】:

    来自bundler's documentation

    因为我们的 Gemfile 中有 gemspec 方法调用,Bundler 会自动将此 gem 添加到名为“development”的组中,然后我们可以在任何时候引用它来加载这些 gem以下行:

    Bundler.require(:default, :development)
    

    在您的情况下,如果您希望安装所有不用于开发的 ruby​​gem,请尝试

    bundle install --without development
    

    对于未来的捆绑器版本,您可以在本地(或全局)配置它

    bundle config set --local without 'development'
    

    要让这一切正常工作,请确认您的项目中有 Gemfile,它看起来像

    # frozen_string_literal: true
    
    source 'https://rubygems.org'
    
    gemspec
    

    【讨论】:

    • 感谢您的回答先生。没有 Gemfile,只有 Gemspec。有一个 gems.rb 确实定义了组开发、测试、运行时并且每个只包含一个 gem。然而,Gemspec 似乎在控制 bundle install 正在做什么,而不是 gems.rb。
    • 谢谢。我现在已经能够验证组 development 是否与任何 specification.add_development_dependency 语句相关联。事实证明,次要依赖项看起来像是重叠的。此外,组 runtime 与 specification.add_runtime_dependency 相关联。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多