Pasé los últimos meses jugando con Gemfiles y Gemfile.locks mucho mientras construía una herramienta de actualización de dependencia automatizada 1 . Lo siguiente está lejos de ser definitivo, pero es un buen punto de partida para comprender el formato Gemfile.lock. También es posible que desee consultar el código fuente del analizador de archivos de bloqueo de Bundler .
Encontrará los siguientes encabezados en un archivo de bloqueo generado por Bundler 1.x:
GEM (opcional pero muy común)
Estas son dependencias provenientes de un servidor Rubygems. Ese puede ser el índice principal de Rubygems, en Rubygems.org, o puede ser un índice personalizado, como los disponibles en Gemfury y otros. Dentro de esta sección verá:
remote:
una o más líneas que especifican la ubicación de los índices de Rubygems
specs:
una lista de dependencias, con su número de versión, y las restricciones en cualquier subdependencia
GIT (opcional)
Estas son dependencias que provienen de un remoto git dado. Verá una sección diferente para cada control remoto de git, y dentro de cada sección verá:
remote:
El mando a distancia. P.ej,git@github.com:rails/rails
revision:
la referencia de confirmación a la que está bloqueado el Gemfile.lock
tag:
(opcional) la etiqueta especificada en el Gemfile
specs:
la dependencia de git encontrada en este control remoto, con su número de versión, y las restricciones en cualquier subdependencia
RUTA (opcional)
Estas son dependencias derivadas de un determinado path
, proporcionado en el Gemfile. Verá una de estas secciones diferente para cada dependencia de ruta, y dentro de cada sección verá:
remote:
el camino. P.ej,plugins/vendored-dependency
specs:
la dependencia de git encontrada en este control remoto, con su número de versión, y las restricciones en cualquier subdependencia
PLATAFORMAS
La plataforma Ruby contra la que se generó el Gemfile.lock. Si alguna dependencia del Gemfile especifica una plataforma, solo se incluirá en el Gemfile.lock cuando el lockfile se genera en esa plataforma (por ejemplo, a través de una instalación).
Dependencias
Una lista de las dependencias que se especifican en Gemfile
, junto con la restricción de versión especificada allí.
Las dependencias especificadas con una fuente distinta del índice principal de Rubygems (por ejemplo, dependencias git, basadas en rutas, dependencias) tienen un !
significado que está "anclado" a esa fuente 2 (aunque a veces hay que buscar en el Gemfile para determinar en).
VERSIÓN DE RUBIO (opcional)
La versión de Ruby especificada en el Gemfile, cuando se creó este Gemfile.lock. Si se especifica una versión de Ruby en un .ruby_version
archivo, esta sección no estará presente (ya que Bundler considerará que el Gemfile / Gemfile.lock es independiente de la versión de Ruby del instalador).
INCLUIDO CON (Paquete> = v1.10.x)
La versión de Bundler utilizada para crear Gemfile.lock. Se usa para recordar a los instaladores que actualicen su versión de Bundler, si es anterior a la versión que creó el archivo.
FUENTE DE PLUGIN (opcional y muy rara)
En teoría, un Gemfile puede especificar complementos de Bundler, así como gemas 3 , que luego se enumerarían aquí. En la práctica, no conozco ningún complemento disponible, a partir de julio de 2017. ¡Esta parte de Bundler todavía está en desarrollo activo!
- https://dependabot.com
- https://github.com/bundler/bundler/issues/4631
- http://andre.arko.net/2012/07/23/towards-a-bundler-plugin-system/