Останні кілька місяців я багато возився з Gemfiles та Gemfile.locks багато під час створення інструменту автоматичного оновлення залежності 1 . Наведене нижче далеко не остаточне, але це хороша відправна точка для розуміння формату Gemfile.lock. Ви також можете перевірити вихідний код для аналізатора файлів блокування Bundler .
Ви знайдете такі заголовки у файлі блокування, згенерованому Bundler 1.x:
GEM (необов’язковий, але дуже поширений)
Це залежності, отримані від сервера Rubygems. Це може бути основний індекс Rubygems на Rubygems.org, або це може бути власний індекс, наприклад, доступний у Gemfury та інших. У цьому розділі ви побачите:
remote:
один або кілька рядків із зазначенням місця розташування індексів Rubygems
specs:
перелік залежностей із номером їх версії та обмеженнями для будь-яких додаткових залежностей
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, знайдена на цьому віддаленому пристрої, з номером його версії та обмеженнями на будь-які додаткові залежності
ПЛАТФОРМИ
Платформа 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/isissue/4631
- http://andre.arko.net/2012/07/23/towards-a-bundler-plugin-system/