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

Why is bundler a dependency but not a spec in Gemfile.lock?

我正在解析 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)

它是一个规范列表(gem 需要为此项目安装),后面是该规范依赖项的缩进列表。因为每个依赖项都需要安装,所以它们都作为规范列在文件的其他地方。 (例如机架在示例底部列为规范,但它依赖于靠近顶部的其他两个规范)

此规则的一个例外是 bundler,它被列为依赖项而不是规范。为什么是这样?是因为 gem 已经安装在系统级别,但没有包含在 Gemfile.lock 中吗?或者这是一种特殊情况,因为捆绑器是生成 Gemfile 的 gem,所以它不包含自身?

If any of the needed gems are already installed, Bundler will use them. After installing any needed gems to your system, bundler writes a snapshot of all of the gems and versions that it installed to Gemfile.lock

https://bundler.io/rationale.html

bundler 创建了 Gemfile.lock,它是 bunler 安装的所有依赖项的列表。由于 bundler 不会自行安装,因此不包含在内。它使它成为一个特殊的 gem - 需要安装到 bootstrap 一个 ruby 应用程序。