การอัพเดตผู้แต่งและการติดตั้งนักแต่งเพลงแตกต่างกันอย่างไร


คำตอบ:


296

การปรับปรุงผู้แต่ง

composer update จะอัปเดตการอ้างอิงตามที่ระบุไว้ composer.json

ตัวอย่างเช่นหากคุณต้องการแพ็กเกจนี้เป็นการพึ่งพา:

"mockery/mockery": "0.9.*",

และคุณได้ติดตั้ง0.9.1เวอร์ชันของแพคเกจจริงแล้วการรันcomposer updateจะทำให้การอัปเกรดแพคเกจนี้ (ตัวอย่างเช่น0.9.2หากมีการเปิดตัวแล้ว)

ในรายละเอียดcomposer updateจะ:

  • อ่าน composer.json
  • ลบแพ็คเกจที่ติดตั้งซึ่งไม่จำเป็นต้องใช้เพิ่มเติม composer.json
  • ตรวจสอบความพร้อมใช้งานของแพ็คเกจล่าสุดที่คุณต้องการ
  • ติดตั้งแพ็คเกจล่าสุดของคุณ
  • อัปเดตcomposer.lockเพื่อจัดเก็บเวอร์ชันแพ็คเกจที่ติดตั้ง

นักแต่งเพลงติดตั้ง

composer installจะไม่อัปเดตอะไรเลย มันจะติดตั้งการอ้างอิงทั้งหมดตามที่ระบุในcomposer.lockไฟล์

ในรายละเอียด:

  • ตรวจสอบว่าcomposer.lockมีไฟล์อยู่หรือไม่ (หากไม่ใช่ให้เรียกใช้composer-updateและสร้าง)
  • อ่านcomposer.lockไฟล์
  • ติดตั้งแพ็กเกจที่ระบุในcomposer.lockไฟล์

เวลาที่จะติดตั้งและเมื่อมีการปรับปรุง

  • composer updateส่วนใหญ่จะใช้ใน 'ช่วงการพัฒนา' เพื่ออัปเกรดแพ็กเกจโครงการของเราตามสิ่งที่เราได้ระบุไว้ในcomposer.jsonไฟล์

  • composer install ส่วนใหญ่จะใช้ใน 'การปรับใช้เฟส' เพื่อติดตั้งแอปพลิเคชันของเราบนเซิร์ฟเวอร์ที่ใช้งานจริงหรือในสภาพแวดล้อมการทดสอบโดยใช้การอ้างอิงเดียวกันที่เก็บไว้ในไฟล์ composer.lock ที่สร้างโดยการอัพเดทผู้แต่ง


5
คุณไม่ได้อธิบายว่าจะเกิดอะไรขึ้นถ้าเราไม่มีไฟล์ล็อคและติดตั้งเครื่องมือแต่งเพลง คำอธิบายที่ดี btw
user1954544

1
สิ่งสำคัญที่อาจกัดคุณในวันเดียว - ไฟล์ล็อคไม่ซ้ำ หากบางแพ็กเกจมีการอ้างอิงที่กำหนดไว้อย่างหลวม ๆ และถ้าคุณบังเอิญหยิบสำเนาที่สะอาดของโปรเจ็กต์บนเครื่องที่สะอาดมันอาจติดตั้งการพึ่งพาที่ซ้อนกันหลายเวอร์ชันซึ่งอาจรวมถึงบั๊กใหม่ โดยเฉพาะอย่างยิ่งที่เกี่ยวข้องกับการรวมและสร้างเซิร์ฟเวอร์อย่างต่อเนื่อง วิธีแก้ปัญหา - ตามล่าหาแพ็คเกจที่มีปัญหาซ้อนกันและเพิ่มรุ่นที่ดีคงที่ไปยัง json และล็อคไฟล์
JustAMartin

และcomposer global updateอัปเดตการอ้างอิงในที่เก็บส่วนกลางของคุณบนระบบโลคัล ( COMPOSER_HOMEตัวแปร env)
Yousha Aleayoub

1
จากนั้นฉันจะอัพเดตแพคเกจเฉพาะบนเซิร์ฟเวอร์ที่ใช้งานจริงได้อย่างไร
มิเชล

@Michel คุณควรรันcomposer updateบนระบบโลคัลของคุณและทดสอบแอปพลิเคชันของคุณจากนั้นอัปโหลด composer.lock บนเซิร์ฟเวอร์ที่ใช้งานจริงของคุณและรันcomposer install
Amin Shojaei

58

เมื่อคุณเรียกใช้composer installมันจะค้นหาไฟล์ล็อคและติดตั้งสิ่งที่มีอยู่ในนั้นหากไม่พบไฟล์มันจะอ่านcomposer.jsonติดตั้งการอ้างอิงและสร้าง lockfile

เมื่อคุณเรียกใช้composer updateเพียงแค่อ่านcomposer.jsonติดตั้งการอ้างอิงและอัปเดต lockfile (หรือสร้าง lockfile ใหม่)


23

composer install

  1. ถ้าcomposer.lockไม่มี
    • ประมวลผลและติดตั้งการพึ่งพาจากcomposer.lockไฟล์
  2. ถ้าcomposer.lockไม่ได้อยู่
    • composer.jsonแพคเกจขั้นตอนการติดตั้งจาก
    • สร้างcomposer.lockไฟล์ตามแพ็กเกจที่ติดตั้ง

ตามcomposer help install:

คำสั่งติดตั้งจะอ่านcomposer.lockไฟล์จากไดเรกทอรีปัจจุบันประมวลผลและดาวน์โหลดและติดตั้งไลบรารีและการอ้างอิงทั้งหมดที่ระบุไว้ในไฟล์นั้น หากไฟล์ไม่มีอยู่มันจะค้นหาcomposer.jsonและทำเช่นเดียวกัน


composer update

  1. ประมวลผลการอ้างอิงจากcomposer.jsonไฟล์ (ติดตั้งอัพเดตและลบ)
  2. สร้างหรืออัพเดตcomposer.lockไฟล์ตามการเปลี่ยนแปลง

ตามcomposer help update:

คำสั่ง update อ่านcomposer.jsonไฟล์จากไดเร็กทอรีปัจจุบันประมวลผลและอัพเดตลบหรือติดตั้งการขึ้นต่อกันทั้งหมด


ดูเพิ่มเติมที่: ผู้แต่ง: ทุกอย่างเกี่ยวกับไฟล์ล็อค


จุดติดตั้งนักแต่งเพลง 3 ไม่สมเหตุสมผล หากไฟล์. lock มีอยู่แล้วไฟล์จะอ่านและไม่ "อัปเดต" มันถูกสร้างขึ้นก็ต่อเมื่อยังไม่มี ..
เบ็น

@Ben ฉันได้ชี้แจงประเด็นให้ฉันรู้ว่าพวกเขาทำให้ตอนนี้
kenorb

3

ความแตกต่างที่ดีที่สุดระหว่างcomposer updateกับcomposer install

นักแต่งเพลงติดตั้ง

ในการเพิ่มการพึ่งพาคุณต้องเพิ่มมันเข้าไปในไฟล์ composer.json ด้วยตนเอง

หากไฟล์ composer.lock มีอยู่ให้ติดตั้งเฉพาะสิ่งที่ระบุไว้ในไฟล์นี้

  • มิฉะนั้นอ่านไฟล์ composer.json เพื่อดูว่าต้องติดตั้งการพึ่งพาอะไร
  • เขียนผู้แต่งล็อคด้วยข้อมูลของโครงการ (การพึ่งพาที่ติดตั้ง)

จะไม่มีการอัปเดตองค์ประกอบใด ๆ ด้วยคำสั่งนี้

การปรับปรุงผู้แต่ง

ในการเพิ่มหรือลบการพึ่งพาคุณต้องเพิ่มมันเข้าไปในไฟล์ composer.json ด้วยตนเอง

  • ไฟล์ composer.lock จะถูกละเว้น
  • การอ้างอิงไฟล์ composer.json จะถูกติดตั้งและอัพเดต (หากไม่ได้ติดตั้งการพึ่งพาจะถูกดาวน์โหลด)

หากคุณไม่สามารถ (หรือไม่ทราบวิธีการเพิ่มหรือลบไลบรารีซึ่งอันที่จริงแล้วเป็นเรื่องง่ายเพียงแค่เพิ่มชื่อของการพึ่งพาและรุ่นในคุณสมบัติต้องการของไฟล์) แก้ไขไฟล์ composer.json ด้วยตนเองหรือ ต้องการใช้บรรทัดคำสั่งแทนผู้แต่งมีฟังก์ชั่นพิเศษสำหรับสิ่งนี้:

นักแต่งเพลงต้องการ

ตัวอย่างเช่นถ้าเราต้องการเพิ่มการพึ่งพากับบรรทัดคำสั่งเราก็จะดำเนินการ

composer require twig/twig

  • ไฟล์ composer.json จะถูกแก้ไขโดยอัตโนมัติและการอ้างอิงใหม่จะถูกเพิ่ม
  • การอ้างอิงจะถูกดาวน์โหลดไปยังโครงการ

นักแต่งเพลงลบ

หากคุณต้องการลบการพึ่งพาที่ไม่ได้ใช้เราจะดำเนินการโดยง่าย:

composer remove twig/twig --update-with-dependencies

  • ทวิกจะถูกลบออกพร้อมการอ้างอิงทั้งหมดของเขา

1

นักแต่งเพลงติดตั้ง

if(composer.lock existed){
   installs dependency with EXACT version in composer.lock file
} else {
   installs dependency with LATEST version in composer.json
   generate the composer.lock file
}

การปรับปรุงผู้แต่ง

composer update = remove composer.lock -> composer install

ทำไมเราต้องมี 2 คำสั่ง ฉันคิดว่ามันสามารถอธิบายได้โดยผู้แต่ง

ลองนึกภาพเราไม่ได้composer.lockและcomposer.jsonมีการพึ่งพาหรือ"monolog/monolog": "1.0.*" จากนั้นจะมีบางกรณี "monolog/monolog": "^1.0"

  • เราทำงานได้ดีในวันนี้ด้วยเวอร์ชันการพึ่งพาปัจจุบัน (เช่น: 1.0.0) แต่ไม่กี่เดือนต่อมาการอัปเดตอ้างอิง (เช่น: 1.0.1) และเป็นไปได้ที่จะมีข้อผิดพลาดบางอย่าง
  • สมาชิกในทีมอื่นอาจมีรุ่นอ้างอิงที่แตกต่างกันหากพวกเขาทำงานcomposer installในเวลาที่แตกต่างกัน

จะเกิดอะไรขึ้นถ้าเราใช้รุ่นที่แน่นอนทุกครั้งcomposer.jsonเช่น"monolog/monolog": "1.0.1"?
เรายังต้องการcomposer.lockเพราะcomposer.jsonเพียงแค่ติดตามรุ่นหลักของการอ้างอิงของคุณมันไม่สามารถติดตามเวอร์ชันของการพึ่งพา

จะเป็นอย่างไรถ้าการพึ่งพาทั้งหมดของการพึ่งพาใช้เวอร์ชัน EXACT ด้วย? ลองนึกภาพคุณเริ่มต้นด้วยการอ้างอิงทั้งหมดที่ใช้รุ่นที่แน่นอนแล้วคุณไม่สนใจเกี่ยวกับ
composer.lockอย่างไรก็ตามไม่กี่เดือนต่อมาคุณเพิ่มการอ้างอิงใหม่ (หรืออัปเดตการอ้างอิงเก่า) และการอ้างอิงของการพึ่งพานี้ไม่ได้ใช้รุ่น EXACT ถ้าอย่างนั้นจะเป็นการดีกว่าที่จะดูแลcomposer.lockในตอนแรก

นอกจากนั้นยังมีข้อดีของรุ่นความหมายมากกว่ารุ่นที่แน่นอน เราอาจอัปเดตการอ้างอิงหลายครั้งในระหว่างการพัฒนาและห้องสมุดมักมีการเปลี่ยนแปลงเล็กน้อยเช่นการแก้ไขข้อบกพร่อง จากนั้นง่ายต่อการอัพเกรดการพึ่งพาซึ่งใช้ semantic version

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.