Saya telah menghabiskan beberapa bulan terakhir bermain-main dengan Gemfiles dan Gemfile. Saya sering mengunci kunci saat membangun alat pembaruan ketergantungan otomatis 1 . Di bawah ini masih jauh dari definitif, tetapi ini adalah titik awal yang baik untuk memahami format Gemfile.lock. Anda mungkin juga ingin memeriksa kode sumber untuk parser lockfile Bundler .
Anda akan menemukan judul berikut di file kunci yang dihasilkan oleh Bundler 1.x:
GEM (opsional tetapi sangat umum)
Ini adalah dependensi yang bersumber dari server Rubygems. Itu mungkin indeks Rubygems utama, di Rubygems.org, atau indeks kustom, seperti yang tersedia dari Gemfury dan lainnya. Dalam bagian ini Anda akan melihat:
remote:
satu atau lebih baris yang menentukan lokasi indeks Rubygems
specs:
daftar dependensi, dengan nomor versinya, dan batasan pada setiap subdependensi
GIT (opsional)
Ini adalah dependensi yang bersumber dari git remote yang diberikan. Anda akan melihat bagian yang berbeda ini untuk setiap remote git, dan di dalam setiap bagian Anda akan melihat:
remote:
remote git. Misalnya,git@github.com:rails/rails
revision:
referensi komit yang Gemfile.lock dikunci
tag:
(opsional) tag yang ditentukan dalam Gemfile
specs:
dependensi git ditemukan pada remote ini, dengan nomor versinya, dan batasan pada setiap subdependensi
PATH (opsional)
Ini adalah dependensi yang bersumber dari yang diberikan path
, disediakan di Gemfile. Anda akan melihat bagian yang berbeda dari ini untuk setiap ketergantungan jalur, dan di dalam setiap bagian Anda akan melihat:
remote:
jalan. Misalnya,plugins/vendored-dependency
specs:
dependensi git ditemukan pada remote ini, dengan nomor versinya, dan batasan pada setiap subdependensi
PLATFORMS
Platform Ruby tempat Gemfile.lock dibuat. Jika ada dependensi dalam Gemfile menentukan platform maka mereka hanya akan dimasukkan dalam Gemfile.lock ketika lockfile dihasilkan pada platform itu (misalnya, melalui instalasi).
DEPENDENSI
Daftar dependensi yang ditentukan dalam Gemfile
, bersama dengan batasan versi yang ditentukan di sana.
Dependensi yang ditentukan dengan sumber selain dari indeks Rubygems utama (misalnya, dependensi git, berbasis path, dependensi) memiliki !
yang berarti "disematkan" ke sumber 2 (walaupun seseorang kadang-kadang harus mencari di Gemfile untuk menentukannya).
VERSI KARET (opsional)
Versi Ruby ditentukan dalam Gemfile, ketika Gemfile.lock ini dibuat. Jika versi Ruby ditentukan dalam .ruby_version
file sebagai gantinya bagian ini tidak akan hadir (karena Bundler akan mempertimbangkan Gemfile / Gemfile.lock agnostik ke versi Ruby pemasang).
DILAKUKAN DENGAN (Bundler> = v1.10.x)
Versi Bundler digunakan untuk membuat Gemfile.lock. Digunakan untuk mengingatkan penginstal untuk memperbarui versi Bundler mereka, jika lebih lama dari versi yang membuat file.
SUMBER PLUGIN (opsional dan sangat jarang)
Secara teori, Gemfile dapat menentukan plugin Bundler, serta permata 3 , yang kemudian akan terdaftar di sini. Dalam praktiknya, saya tidak mengetahui adanya plugin yang tersedia, pada Juli 2017. Bagian dari Bundler ini masih dalam pengembangan aktif!
- https://dependabot.com
- https://github.com/bundler/bundler/issues/4631
- http://andre.arko.net/2012/07/23/towards-a-bundler-plugin-system/