Tôi đã dành vài tháng qua để tìm hiểu về Gemfiles và Gemfile.locks rất nhiều trong khi xây dựng một công cụ cập nhật phụ thuộc tự động 1 . Dưới đây là không rõ ràng, nhưng đó là một điểm khởi đầu tốt để hiểu định dạng Gemfile.lock. Bạn cũng có thể muốn kiểm tra mã nguồn cho trình phân tích cú pháp khóa của Bundler .
Bạn sẽ tìm thấy các tiêu đề sau trong tệp khóa được tạo bởi Bundler 1.x:
GEM (tùy chọn nhưng rất phổ biến)
Đây là những phụ thuộc có nguồn gốc từ một máy chủ Rubygems. Đó có thể là chỉ mục chính của Rubygems, tại Rubygems.org hoặc nó có thể là một chỉ mục tùy chỉnh, chẳng hạn như chỉ số có sẵn từ Gemfury và những người khác. Trong phần này, bạn sẽ thấy:
remote:
một hoặc nhiều dòng chỉ định vị trí của chỉ số Rubygems
specs:
một danh sách các phụ thuộc, với số phiên bản của chúng và các ràng buộc đối với bất kỳ phụ thuộc nào
GIT (tùy chọn)
Đây là những phụ thuộc có nguồn gốc từ một git từ xa nhất định. Bạn sẽ thấy một trong những phần khác nhau cho mỗi điều khiển từ xa và trong mỗi phần bạn sẽ thấy:
remote:
cái git từ xa. Ví dụ,git@github.com:rails/rails
revision:
tham chiếu cam kết Gemfile.lock bị khóa
tag:
(tùy chọn) thẻ được chỉ định trong Gemfile
specs:
sự phụ thuộc git được tìm thấy ở điều khiển từ xa này, với số phiên bản của nó và các ràng buộc đối với bất kỳ phụ thuộc nào
ĐƯỜNG (tùy chọn)
Đây là những phụ thuộc có nguồn gốc từ một thứ nhất định path
, được cung cấp trong Gemfile. Bạn sẽ thấy một trong những phần khác nhau cho từng phụ thuộc đường dẫn và trong mỗi phần bạn sẽ thấy:
remote:
con đường. Ví dụ,plugins/vendored-dependency
specs:
sự phụ thuộc git được tìm thấy ở điều khiển từ xa này, với số phiên bản của nó và các ràng buộc đối với bất kỳ phụ thuộc nào
NỀN TẢNG
Nền tảng Ruby mà Gemfile.lock được tạo ra để chống lại. Nếu bất kỳ phụ thuộc nào trong Gemfile chỉ định một nền tảng thì chúng sẽ chỉ được bao gồm trong Gemfile.lock khi lockfile được tạo trên nền tảng đó (ví dụ: thông qua cài đặt).
Phụ tùng
Một danh sách các phụ thuộc được chỉ định trong Gemfile
, cùng với các ràng buộc phiên bản được chỉ định ở đó.
Các phụ thuộc được chỉ định với một nguồn không phải là chỉ số chính của Rubygems (ví dụ: phụ thuộc git, dựa trên đường dẫn, phụ thuộc) có !
nghĩa là chúng được "ghim" vào nguồn 2 đó (mặc dù đôi khi người ta phải nhìn vào Gemfile để xác định).
PHIÊN BẢN RUBY (tùy chọn)
Phiên bản Ruby được chỉ định trong Gemfile, khi Gemfile.lock này được tạo. Nếu một phiên bản Ruby được chỉ định trong một .ruby_version
tệp thay vì phần này sẽ không có mặt (vì Bundler sẽ xem xét bất khả tri của Gemfile / Gemfile.lock đối với phiên bản Ruby của trình cài đặt).
BUNDLED VỚI (Bundler> = v1.10.x)
Phiên bản Bundler được sử dụng để tạo Gemfile.lock. Được sử dụng để nhắc nhở các trình cài đặt cập nhật phiên bản Bundler của họ, nếu phiên bản cũ hơn phiên bản đã tạo tệp.
NGUỒN PLUGIN (tùy chọn và rất hiếm)
Về lý thuyết, Gemfile có thể chỉ định các plugin Bundler, cũng như gem 3 , sau đó sẽ được liệt kê ở đây. Trong thực tế, tôi không biết về bất kỳ plugin nào có sẵn, kể từ tháng 7 năm 2017. Phần này của Bundler vẫn đang được phát triển tích cực!
- https://dependabot.com
- https://github.com/bundler/bundler/issues/4631
- http://andre.arko.net/2012/07/23/towards-a-bundler-plugin-system/