Ho passato gli ultimi mesi a scherzare con Gemfiles e Gemfile.locks molto mentre costruivo uno strumento di aggiornamento automatico delle dipendenze 1 . Il seguito è tutt'altro che definitivo, ma è un buon punto di partenza per comprendere il formato Gemfile.lock. Potresti anche voler controllare il codice sorgente per il parser del file di blocco di Bundler .
Troverai le seguenti intestazioni in un file di blocco generato da Bundler 1.x:
GEM (opzionale ma molto comune)
Queste sono dipendenze provenienti da un server Rubygems. Questo potrebbe essere il principale indice di Rubygems, su Rubygems.org, oppure potrebbe essere un indice personalizzato, come quelli disponibili da Gemfury e altri. All'interno di questa sezione vedrai:
remote:
una o più righe che specificano la posizione dell'indice o degli indici di Rubygems
specs:
un elenco di dipendenze, con il loro numero di versione e i vincoli su eventuali sottodipendenze
GIT (opzionale)
Queste sono dipendenze provenienti da un dato telecomando git. Vedrai una diversa di queste sezioni per ogni telecomando git e all'interno di ogni sezione vedrai:
remote:
il telecomando git. Per esempio,git@github.com:rails/rails
revision:
il riferimento di commit a cui Gemfile.lock è bloccato
tag:
(facoltativo) il tag specificato nel Gemfile
specs:
la dipendenza git trovata su questo telecomando, con il suo numero di versione e i vincoli su eventuali sottodipendenze
PERCORSO (opzionale)
Queste sono dipendenze provenienti da un dato path
, fornite nel Gemfile. Vedrai una diversa di queste sezioni per ogni dipendenza del percorso e all'interno di ogni sezione vedrai:
remote:
il sentiero. Per esempio,plugins/vendored-dependency
specs:
la dipendenza git trovata su questo telecomando, con il suo numero di versione e i vincoli su eventuali sottodipendenze
PIATTAFORME
La piattaforma Ruby contro cui è stato generato Gemfile.lock. Se alcune dipendenze nel Gemfile specificano una piattaforma, queste saranno incluse nel Gemfile.lock solo quando il lockfile viene generato su quella piattaforma (ad es. Attraverso un'installazione).
DIPENDENZE
Un elenco delle dipendenze specificate in Gemfile
, insieme al vincolo di versione specificato lì.
Le dipendenze specificate con una fonte diversa dall'indice principale di Rubygems (ad es. Dipendenze git, basate sul percorso, dipendenze) hanno un !
significato che significa che sono "bloccate" a quella fonte 2 (anche se a volte si deve cercare nel Gemfile per determinare in).
VERSIONE RUBY (opzionale)
La versione di Ruby specificata nel Gemfile, quando è stato creato questo Gemfile.lock. Se in un .ruby_version
file viene specificata una versione di Ruby, questa sezione non sarà presente (poiché Bundler considererà Gemfile / Gemfile.lock agnostico rispetto alla versione di Ruby dell'installatore).
CONFEZIONATO CON (Bundler> = v1.10.x)
La versione di Bundler utilizzata per creare Gemfile.lock. Utilizzato per ricordare agli installatori di aggiornare la loro versione di Bundler, se è precedente alla versione che ha creato il file.
PLUGIN SOURCE (opzionale e molto raro)
In teoria, un Gemfile può specificare plugin Bundler, così come gemme 3 , che sarebbero quindi elencati qui. In pratica, non sono a conoscenza di plug-in disponibili, a partire da luglio 2017. Questa parte di Bundler è ancora in fase di sviluppo attivo!
- https://dependabot.com
- https://github.com/bundler/bundler/issues/4631
- http://andre.arko.net/2012/07/23/towards-a-bundler-plugin-system/