Последние несколько месяцев я много возился с Gemfiles и Gemfile.locks, создавая инструмент автоматического обновления зависимостей 1 . Ниже далеко не все, но это хорошая отправная точка для понимания формата Gemfile.lock. Возможно, вы также захотите проверить исходный код парсера файла блокировки Bundler .
Вы найдете следующие заголовки в файле блокировки, сгенерированном Bundler 1.x:
GEM (необязательно, но очень часто)
Это зависимости, полученные из сервера Rubygems. Это может быть основной индекс Rubygems на Rubygems.org или пользовательский индекс, например, доступный в Gemfury и других. В этом разделе вы увидите:
remote:
одна или несколько строк, указывающих расположение индекса (ов) Rubygems
specs:
список зависимостей, с их номером версии и ограничениями на любые подчиненные зависимости
GIT (опционально)
Это зависимости, полученные из данного git remote. Вы увидите разные разделы для каждого git remote, а внутри каждого раздела вы увидите:
remote:
Git Remote. Например,git@github.com:rails/rails
revision:
ссылка коммита, к которой заблокирован Gemfile.lock
tag:
(необязательно) тег, указанный в Gemfile
specs:
git-зависимость, найденная на этом удаленном компьютере, с номером версии и ограничениями на любые подзависимости
ПУТЬ (необязательно)
Это зависимости, полученные из заданного path
в Gemfile. Вы увидите различный из этих разделов для каждой зависимости пути, и в каждом разделе вы увидите:
remote:
тропинка. Например,plugins/vendored-dependency
specs:
git-зависимость, найденная на этом удаленном компьютере, с номером версии и ограничениями на любые подзависимости
ПЛАТФОРМЫ
Платформа Ruby, против которой был создан Gemfile.lock. Если какие-либо зависимости в Gemfile указывают платформу, они будут включены в Gemfile.lock только при создании файла блокировки на этой платформе (например, посредством установки).
ЗАВИСИМОСТИ
Список зависимостей, указанных в Gemfile
, вместе с указанным там ограничением версии.
Зависимости, указанные с источником, отличным от основного индекса Rubygems (например, git-зависимости, основанные на пути, зависимости), имеют значение, !
которое означает, что они «прикреплены» к этому источнику 2 (хотя иногда нужно искать в Gemfile, чтобы определить его).
РУБИНОВАЯ ВЕРСИЯ (опционально)
Версия Ruby, указанная в Gemfile, когда был создан этот Gemfile.lock. Если .ruby_version
вместо этого в файле указана версия Ruby, этот раздел не будет представлен (так как Bundler будет рассматривать Gemfile / Gemfile.lock независимо от версии Ruby установщика).
ОБЯЗАН С (Bundler> = v1.10.x)
Версия Bundler, использованная для создания Gemfile.lock. Используется для напоминания установщикам обновить свою версию Bundler, если она старше, чем версия, создавшая файл.
ИСТОЧНИК ПЛАГИНА (необязательно и очень редко)
Теоретически, Gemfile может указывать плагины Bundler, а также гемы 3 , которые затем будут перечислены здесь. На практике я не знаю ни о каких доступных плагинах по состоянию на июль 2017 года. Эта часть Bundler все еще находится в активной разработке!
- https://dependabot.com
- https://github.com/bundler/bundler/issues/4631
- http://andre.arko.net/2012/07/23/towards-a-bundler-plugin-system/