Ostatnie kilka miesięcy spędziłem na zabawie z Gemfiles i Gemfile.locks podczas tworzenia automatycznego narzędzia do aktualizacji zależności 1 . Poniżej znajduje się daleka od ostateczności, ale jest to dobry punkt wyjścia do zrozumienia formatu Gemfile.lock. Możesz także sprawdzić kod źródłowy analizatora plików blokujących Bundlera .
W pliku blokującym wygenerowanym przez Bundler 1.x znajdują się następujące nagłówki:
GEM (opcjonalnie, ale bardzo często)
Są to zależności pochodzące z serwera Rubygems. Może to być główny indeks Rubygems, na stronie Rubygems.org, lub może to być indeks niestandardowy, taki jak te dostępne w Gemfury i innych. W tej sekcji zobaczysz:
remote:
jeden lub więcej wierszy określających położenie indeksu (-ów) Rubygems
specs:
lista zależności wraz z ich numerem wersji i ograniczeniami wszelkich zależności zależnych
GIT (opcjonalnie)
Są to zależności pochodzące od danego zdalnego git. Zobaczysz inną z tych sekcji dla każdego pilota git, aw każdej sekcji zobaczysz:
remote:
pilot git. Na przykład,git@github.com:rails/rails
revision:
referencja zatwierdzenia, w której znajduje się Gemfile.lock
tag:
(opcjonalnie) znacznik określony w pliku Gemfile
specs:
zależność git znaleziona na tym pilocie, wraz z jej numerem wersji i ograniczeniami wszelkich zależności zależnych
ŚCIEŻKA (opcjonalnie)
Są to zależności pochodzące od danego path
, podane w Gemfile. Zobaczysz inną z tych sekcji dla każdej zależności ścieżki, aw każdej sekcji zobaczysz:
remote:
ścieżka. Na przykład,plugins/vendored-dependency
specs:
zależność git znaleziona na tym pilocie, wraz z jej numerem wersji i ograniczeniami wszelkich zależności zależnych
PLATFORMY
Platforma Ruby, przeciwko której wygenerowano Gemfile.lock. Jeśli jakiekolwiek zależności w pliku Gemfile określają platformę, zostaną one uwzględnione w pliku Gemfile.lock tylko wtedy, gdy plik blokady zostanie wygenerowany na tej platformie (np. Podczas instalacji).
ZALEŻNOŚCI
Lista zależności, które są określone w Gemfile
, wraz z ograniczeniem wersji tam określonym.
Zależności określone w źródle innym niż główny indeks Rubygems (np. Zależności git, zależne od ścieżki, zależności) mają !
co oznacza, że są „przypięte” do tego źródła 2 (chociaż czasami trzeba zajrzeć do pliku Gemfile, aby określić in).
WERSJA RUBY (opcjonalnie)
Wersja Ruby określona w Gemfile, kiedy ten Gemfile.lock został utworzony. Jeśli .ruby_version
zamiast tego w pliku podano wersję Ruby, ta sekcja nie będzie obecna (ponieważ Bundler uzna Gemfile / Gemfile.lock za agnostyczny wobec wersji Ruby instalatora).
ZWIĄZANE Z (Bundler> = v1.10.x)
Wersja Bundlera użyta do utworzenia Gemfile.lock. Służy do przypominania instalatorom o aktualizacji ich wersji Bundlera, jeśli jest on starszy niż wersja, która utworzyła plik.
ŹRÓDŁO WTYKU (opcjonalne i bardzo rzadkie)
Teoretycznie Gemfile może określać wtyczki Bundlera, a także klejnoty 3 , które zostałyby tutaj wymienione. W praktyce od lipca 2017 r. Nie znam żadnych dostępnych wtyczek. Ta część pakietu jest wciąż w fazie rozwoju!
- https://dependabot.com
- https://github.com/bundler/bundler/issues/4631
- http://andre.arko.net/2012/07/23/towards-a-bundler-plugin-system/