我可以在 gemfile 中强制 gem 的依赖项吗?

Posted

技术标签:

【中文标题】我可以在 gemfile 中强制 gem 的依赖项吗?【英文标题】:Can I force a gem's dependencies in gemfile? 【发布时间】:2011-11-18 01:19:09 【问题描述】:

如果有两个宝石,ABA1.0.0 依赖于 B1.0.0

在我的 Gemfile 中:

gem 'A', '~> 1.0.0'

然后运行bundle。它将生成一个 Gemfile.lock,如下所示:

A (1.0.0)
  B (1.0.0)

但如果我想强制A 使用B1.0.1,最佳做法是什么?另外,如果B1.0.1不是release,而是github标签?

【问题讨论】:

【参考方案1】:

您需要在 Gemfile 中明确指定 B gem 才能使用 git 存储库或其他版本。只要 A 1.0.0 与 B 1.0.1 兼容,就可以了。如果它仅与 B 1.0.0 兼容,那么您必须创建自己的 A gem 分支并将 gemspec 升级为与 B 1.0.1 兼容,然后将该存储库用作 A 而不是 ruby​​gems 的 gem版本。

如果 A 1.0.0 与 B 1.0.1 兼容,这是一个示例 Gemfile,它应该可以满足您的需求。

gem 'B', :git => 'git://github.com/B/B.git', :tag => '1.0.1'
gem 'A', '~> 1.0.0'

【讨论】:

以上是关于我可以在 gemfile 中强制 gem 的依赖项吗?的主要内容,如果未能解决你的问题,请参考以下文章

降级 gem 时,bundler 可以自动降级 gem 的依赖项吗?

在 gem 中使用 rails 作为依赖项

如何强制 Bundler 重新安装我的所有 gem?

如何在我的 gemspec 中使用来自 github 的依赖项?

在开发过程中如何配置 Bundler/Gemfile 以使用不同的 gem 源?

如何在我的 Gemfile 中指定本地 gem?