ฉันได้ใช้เวลาไม่กี่เดือนที่ผ่านมา messing รอบด้วย Gemfiles และ Gemfile.locks มากในขณะที่การสร้างเครื่องมือการปรับปรุงการพึ่งพาอัตโนมัติ1 ด้านล่างอยู่ไกลจากขั้นสุดท้าย แต่เป็นจุดเริ่มต้นที่ดีสำหรับการทำความเข้าใจรูปแบบ Gemfile.lock นอกจากนี้คุณยังอาจต้องการตรวจสอบรหัสที่มาสำหรับ Bundler ของparser แฟ้มล็อค
คุณจะพบหัวข้อต่อไปนี้ใน lockfile ที่สร้างโดย Bundler 1.x:
GEM (เป็นทางเลือก แต่เป็นเรื่องธรรมดามาก)
สิ่งเหล่านี้เป็นการอ้างอิงที่มาจากเซิร์ฟเวอร์ Rubygems นั่นอาจเป็นดัชนี Rubygems หลักที่ Rubygems.org หรืออาจเป็นดัชนีที่กำหนดเองเช่นดัชนีจาก Gemfury และอื่น ๆ ภายในส่วนนี้คุณจะเห็น:
remote:
มีหนึ่งบรรทัดขึ้นไปที่ระบุตำแหน่งของดัชนี Rubygems
specs:
รายการของการอ้างอิงพร้อมกับหมายเลขรุ่นของพวกเขาและข้อ จำกัด ในการพึ่งพาใด ๆ
GIT (เป็นทางเลือก)
สิ่งเหล่านี้เป็นการอ้างอิงที่มาจากรีโมต git ที่กำหนด คุณจะเห็นส่วนต่าง ๆ เหล่านี้สำหรับแต่ละรีโมตคอมไพล์และภายในแต่ละส่วนคุณจะเห็น:
remote:
รีโมทคอมไพล์ เช่น,git@github.com:rails/rails
revision:
การคอมมิตอ้างอิง Gemfile.lock ถูกล็อคไว้
tag:
(ทางเลือก) แท็กที่ระบุใน Gemfile
specs:
การพึ่งพา git ที่พบที่รีโมตนี้พร้อมกับหมายเลขเวอร์ชันและข้อ จำกัด ของการพึ่งพาใด ๆ
เส้นทาง (ไม่จำเป็น)
เหล่านี้คือการอ้างอิงที่มาจากที่กำหนดไว้path
ใน Gemfile คุณจะเห็นส่วนที่แตกต่างของส่วนเหล่านี้สำหรับการอ้างอิงแต่ละเส้นทางและภายในแต่ละส่วนคุณจะเห็น:
remote:
เส้นทาง. เช่น,plugins/vendored-dependency
specs:
การพึ่งพา git ที่พบที่รีโมตนี้พร้อมกับหมายเลขเวอร์ชันและข้อ จำกัด ของการพึ่งพาใด ๆ
แพลตฟอร์ม
แพลตฟอร์ม Ruby ที่ Gemfile.lock ถูกสร้างขึ้น หากการอ้างอิงใด ๆ ใน Gemfile ระบุแพลตฟอร์มดังนั้นพวกเขาจะรวมอยู่ใน Gemfile.lock เมื่อล็อคไฟล์ถูกสร้างขึ้นบนแพลตฟอร์มนั้น (เช่นผ่านการติดตั้ง)
DEPENDENCIES
รายการของการขึ้นต่อกันที่ระบุไว้ในGemfile
, พร้อมกับข้อ จำกัด เวอร์ชันที่ระบุไว้ที่นั่น
การอ้างอิงที่ระบุพร้อมกับแหล่งอื่นนอกเหนือจากดัชนี Rubygems หลัก (เช่นการอ้างอิง git, การอ้างอิงพา ธ , การอ้างอิง) มี!
วิธีการที่พวกเขาจะ "ตรึง" ไปยังแหล่งที่2 (แม้ว่าบางครั้งต้องดูใน Gemfile เพื่อกำหนด)
รุ่น RUBY (ไม่บังคับ)
เวอร์ชัน Ruby ที่ระบุใน Gemfile เมื่อ Gemfile.lock นี้ถูกสร้างขึ้น หากระบุรุ่นทับทิมใน.ruby_version
ไฟล์แทนส่วนนี้จะไม่ปรากฏ (เนื่องจาก Bundler จะพิจารณา Gemfile / Gemfile.lock ไม่เชื่อเรื่องพระเจ้ากับรุ่น Ruby ของโปรแกรมติดตั้ง)
ผสานกับ (Bundler> = v1.10.x)
เวอร์ชันของ Bundler ใช้เพื่อสร้าง Gemfile.lock ใช้เพื่อเตือนให้ผู้ติดตั้งอัปเดต Bundler เวอร์ชันหากเวอร์ชันเก่ากว่าที่สร้างไฟล์
แหล่งปลั๊กอิน (ตัวเลือกและหายากมาก)
ในทางทฤษฎี Gemfile สามารถระบุปลั๊กอิน Bundler ได้เช่นเดียวกับอัญมณี3ซึ่งจะแสดงอยู่ที่นี่ ในทางปฏิบัติฉันไม่ทราบว่ามีปลั๊กอินใดบ้างตั้งแต่เดือนกรกฎาคม 2017 ส่วนหนึ่งของ Bundler นี้ยังอยู่ในระหว่างการพัฒนา!
- https://dependabot.com
- https://github.com/bundler/bundler/issues/4631
- http://andre.arko.net/2012/07/23/towards-a-bundler-plugin-system/