【问题标题】:Dependency on different version of some gems依赖于某些 gem 的不同版本
【发布时间】:2014-01-27 19:23:14
【问题描述】:

我一直在玩 Chef gem。当我检查它的依赖关系时,结果发现它依赖于一些 gem 的多个版本,如 json、chef-zero 等。

我的问题是为什么一个 gem 依赖于同一个 gem 的多个版本?我的意思是,不应该是我安装了最新版本的 chef-zero 并且它满足了 chef 的所有依赖吗?此外,我有什么方法可以进行更改,使 chef 只​​依赖于一个版本的 chef-zero?

【问题讨论】:

    标签: rubygems chef-infra


    【解决方案1】:

    这就是开源的美妙之处,任何有好主意和良好编程技能的人都可以做出贡献。但是人们不会从头开始编写所有代码。这是一个进化过程,因此 gem 使用其他可用的 gem 来满足他们的需求,从而导致依赖。

    一个简单的例子是像“PDFKit”或“wicked_pdf”这样的宝石。两者都是将 html 页面打印到 pdf 的绝佳宝石。但它们使用相同的深度,即“wkhtmltopdf-binary”。由于后者已经可用,因此这些插件的作者编写这部分代码实际上并不是一个好主意。这样更聪明。

    简而言之,您必须自己处理依赖关系,但从好的方面来说,几乎每个优秀的 gem 都会在其更改日志中清楚地提及它们的依赖状态。

    【讨论】:

    • 听起来不错。但我想知道的是为什么一个 gem 依赖于同一个 gem 的多个版本。我的意思是,如果我只需要安装一个 gem,而不是安装不同的版本,不是更好吗?
    • 看看stackoverflow.com/questions/6132479/…,也许会有帮助!
    【解决方案2】:

    嗯,不完全是这样。您不必安装同一个 gem 的多个版本。据我了解,您对以下类型的 Chef 11.8.2 的依赖关系感到困惑:

    chef-zero >= 1.6.2, ~> 1.6
    diff-lcs >= 1.2.4, ~> 1.2
    

    在这种情况下,您必须安装支持这两种约束的版本。例如对于chef-zero,它将是超过 1.6.2(第一个约束)的任何版本,但不大于 2.0(第二个约束)。 (Gem dependencies versions meaning)

    使用 json 更容易

    json <= 1.7.7, >= 1.4.4
    

    安装的版本应该在 1.4.4 和 1.7.7 之间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-02
      • 2019-02-25
      • 2014-08-18
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多