为什么bundler是依赖项,而不是Gemfile.lock中的规范?

时间:2019-01-07 19:05:26

标签: ruby bundler

我正在解析Gemfile.lock以创建依赖关系图。该文件的示例:

rack-ssl (1.3.4)
    rack
rack-test (0.6.3)
    rack (>= 1.0)
rails (3.2.22.1)
    actionmailer (= 3.2.22.1)
    actionpack (= 3.2.22.1)
    activerecord (= 3.2.22.1)
    activeresource (= 3.2.22.1)
    activesupport (= 3.2.22.1)
    bundler (~> 1.0)
    railties (= 3.2.22.1)
rack (1.4.7)

这是规格列表(此项目需要安装的宝石),然后是该规格依赖项的缩进列表。因为每个依赖项都需要安装,所以它们在所有文件中都列为规范。 (例如,样品架的底部列出了E.G.机架的规格,但顶部附近还有其他两个规格的依赖项)

此规则的一个例外是bundler,它被列为依赖项而不是规范。为什么是这样?是否因为Gemfile.lock中未包含已在系统级别安装的gem?还是这是一种特殊情况,因为捆绑程序是生成Gemfile的宝石,所以它不包含自身?

1 个答案:

答案 0 :(得分:1)

  

如果已经安装了所需的任何宝石,Bundler将使用它们。将所需的gem安装到系统后,捆绑程序会将安装的所有gem和版本的快照写入Gemfile.lock

https://bundler.io/rationale.html

bundler创建Gemfile.lock,并且是bunler安装的所有依赖项的列表。由于bundler不会自行安装,因此不包含在内。它使其成为一种特殊的宝石-需要安装该宝石才能引导红宝石应用程序。