代码之家  ›  专栏  ›  技术社区  ›  Konstantin Haase

rubygems可选依赖项

  •  8
  • Konstantin Haase  · 技术社区  · 14 年前

    如何向rubygems添加可选依赖项,因为它不支持它?

    用例:

    • 我有一个库,它依赖于backports、extlib、facets或activesupport。在过去,我只是没有添加任何这种依赖性,因为人们可以选择(阅读:它可以很好地发挥他们正在使用的任何东西),但人们抱怨图书馆没有工作的开箱即用,或者他们会相信它依赖于活动支持(在某些情况下,这是一些人的禁忌)。所以现在它依赖于端口,因为这是最基本的。尽管这意味着如果安装我的库,人们会安装backport,即使他们可能在运行时不使用它。
    • 我想依靠不同的宝石,取决于环境(即约翰逊在核磁共振成像/鲁比尼乌斯,特鲁比里诺在JRuby,林登在MacRuby)。

    我认为一种方法是劫持 extconf.rb . 我可以在那里做系统检查。然而,这感觉是错误的。另外,如果这是唯一的方法,我该怎么做呢?如何从那里触发安装额外的gems? system 'gem install ...' ?

    2 回复  |  直到 13 年前
        1
  •  4
  •   Andrew Grimm atk    14 年前

    您是否尝试为未满足的依赖项提供信息性错误消息,以消除这些误解?有了僵尸追逐者,我不会让gosu成为依赖项,但是如果人们尝试使用没有gosu的图形版本,我会通知他们需要安装gosu。

        2
  •  2
  •   John    13 年前

    我知道有几颗宝石被劫持了 extconf.rb 方法:

    两使用 Gem::DependencyInstaller#install 安装,这可能比 system 'gem install ...' .

    另请参见此rubygems功能请求: specify dependencies per ruby version .