Последние несколько месяцев я много возился с Gemfiles, и Gemfile.locks много занимался созданием автоматизированного инструмента обновления зависимостей 1 .Ниже далеко не все, но это хорошая отправная точка для понимания формата Gemfile.lock.Вы также можете проверить исходный код для парсера файла блокировки Bundler .
В файле блокировки, сгенерированном Bundler 1.x, вы найдете следующие заголовки:
GEM (необязательно, но очень часто)
Это зависимости, полученные из сервера Rubygems.Это может быть основной индекс Rubygems на Rubygems.org или пользовательский индекс, например, доступный в Gemfury и других.В этом разделе вы увидите:
remote:
одну или несколько строк, указывающих расположение индекса (ов) Rubygems specs:
список зависимостей с ихномер версии и ограничения на любые подчиненные зависимости
GIT (необязательно)
Это зависимости, полученные из данного удаленного git.Вы увидите разные разделы для каждого git-пульта, а внутри каждого раздела вы увидите:
remote:
git-пульта.Например, git@github.com:rails/rails
revision:
ссылка на фиксацию Gemfile.lock заблокирована для tag:
(необязательно) тега, указанного в Gemfile specs:
git-зависимость, найденная на этом удаленном компьютере, с номером версии и ограничениями на любые подзависимости
PATH (необязательно)
Это зависимости, полученные изданное path
, предоставленное в Gemfile.Вы увидите различный из этих разделов для каждой зависимости пути, и внутри каждого раздела вы увидите:
remote:
путь.Например, plugins/vendored-dependency
specs:
зависимость git, найденная на этом удаленном компьютере, с номером версии и ограничениями на любые подчиненные зависимости
PLATFORMS
Платформа Ruby, против которой был создан Gemfile.lock.Если какие-либо зависимости в Gemfile указывают платформу, они будут включены в Gemfile.lock только при создании файла блокировки на этой платформе (например, посредством установки).
DEPENDENCIES
Список зависимостей, указанных в Gemfile
, вместе с указанным там ограничением версии.
Зависимости, указанные с источником, отличным от основного индекса Rubygems (например, зависимости git,основанные на пути, зависимости) имеют !
, что означает, что они "прикреплены" к этому источнику 2 (хотя иногда нужно искать в Gemfile, чтобы определить, в каком).
RUBY VERSION (необязательно)
Версия Ruby, указанная в Gemfile, когда был создан этот Gemfile.lock.Если вместо этого в файле .ruby_version
указана версия Ruby, этот раздел не будет представлен (так как Bundler будет рассматривать Gemfile / Gemfile.lock независимо от версии Ruby установщика).
BUNDLED WITH (Bundler> = v1.10.x)
Версия Bundler, использованная для создания Gemfile.lock.Используется для напоминания установщикам обновить свою версию Bundler, если она старше, чем версия, создавшая файл.
PLUGIN SOURCE (необязательно и очень редко)
InВ теории 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/