อะไรคือความแตกต่างระหว่างcomposer update
และcomposer install
?
อะไรคือความแตกต่างระหว่างcomposer update
และcomposer install
?
คำตอบ:
การปรับปรุงผู้แต่ง
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 ที่สร้างโดยการอัพเดทผู้แต่ง
composer global update
อัปเดตการอ้างอิงในที่เก็บส่วนกลางของคุณบนระบบโลคัล ( COMPOSER_HOME
ตัวแปร env)
composer update
บนระบบโลคัลของคุณและทดสอบแอปพลิเคชันของคุณจากนั้นอัปโหลด composer.lock บนเซิร์ฟเวอร์ที่ใช้งานจริงของคุณและรันcomposer install
เมื่อคุณเรียกใช้composer install
มันจะค้นหาไฟล์ล็อคและติดตั้งสิ่งที่มีอยู่ในนั้นหากไม่พบไฟล์มันจะอ่านcomposer.json
ติดตั้งการอ้างอิงและสร้าง lockfile
เมื่อคุณเรียกใช้composer update
เพียงแค่อ่านcomposer.json
ติดตั้งการอ้างอิงและอัปเดต lockfile (หรือสร้าง lockfile ใหม่)
composer install
composer.lock
ไม่มี
composer.lock
ไฟล์composer.lock
ไม่ได้อยู่
composer.json
แพคเกจขั้นตอนการติดตั้งจากcomposer.lock
ไฟล์ตามแพ็กเกจที่ติดตั้งตามcomposer help install
:
คำสั่งติดตั้งจะอ่าน
composer.lock
ไฟล์จากไดเรกทอรีปัจจุบันประมวลผลและดาวน์โหลดและติดตั้งไลบรารีและการอ้างอิงทั้งหมดที่ระบุไว้ในไฟล์นั้น หากไฟล์ไม่มีอยู่มันจะค้นหาcomposer.json
และทำเช่นเดียวกัน
composer update
composer.json
ไฟล์ (ติดตั้งอัพเดตและลบ)composer.lock
ไฟล์ตามการเปลี่ยนแปลงตามcomposer help update
:
คำสั่ง update อ่าน
composer.json
ไฟล์จากไดเร็กทอรีปัจจุบันประมวลผลและอัพเดตลบหรือติดตั้งการขึ้นต่อกันทั้งหมด
ดูเพิ่มเติมที่: ผู้แต่ง: ทุกอย่างเกี่ยวกับไฟล์ล็อค
ความแตกต่างที่ดีที่สุดระหว่างcomposer update
กับcomposer install
นักแต่งเพลงติดตั้ง
ในการเพิ่มการพึ่งพาคุณต้องเพิ่มมันเข้าไปในไฟล์ composer.json ด้วยตนเอง
หากไฟล์ composer.lock มีอยู่ให้ติดตั้งเฉพาะสิ่งที่ระบุไว้ในไฟล์นี้
จะไม่มีการอัปเดตองค์ประกอบใด ๆ ด้วยคำสั่งนี้
การปรับปรุงผู้แต่ง
ในการเพิ่มหรือลบการพึ่งพาคุณต้องเพิ่มมันเข้าไปในไฟล์ composer.json ด้วยตนเอง
หากคุณไม่สามารถ (หรือไม่ทราบวิธีการเพิ่มหรือลบไลบรารีซึ่งอันที่จริงแล้วเป็นเรื่องง่ายเพียงแค่เพิ่มชื่อของการพึ่งพาและรุ่นในคุณสมบัติต้องการของไฟล์) แก้ไขไฟล์ composer.json ด้วยตนเองหรือ ต้องการใช้บรรทัดคำสั่งแทนผู้แต่งมีฟังก์ชั่นพิเศษสำหรับสิ่งนี้:
นักแต่งเพลงต้องการ
ตัวอย่างเช่นถ้าเราต้องการเพิ่มการพึ่งพากับบรรทัดคำสั่งเราก็จะดำเนินการ
composer require twig/twig
นักแต่งเพลงลบ
หากคุณต้องการลบการพึ่งพาที่ไม่ได้ใช้เราจะดำเนินการโดยง่าย:
composer remove twig/twig --update-with-dependencies
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"
composer install
ในเวลาที่แตกต่างกันจะเกิดอะไรขึ้นถ้าเราใช้รุ่นที่แน่นอนทุกครั้งcomposer.json
เช่น"monolog/monolog": "1.0.1"
?
เรายังต้องการcomposer.lock
เพราะcomposer.json
เพียงแค่ติดตามรุ่นหลักของการอ้างอิงของคุณมันไม่สามารถติดตามเวอร์ชันของการพึ่งพา
จะเป็นอย่างไรถ้าการพึ่งพาทั้งหมดของการพึ่งพาใช้เวอร์ชัน EXACT ด้วย? ลองนึกภาพคุณเริ่มต้นด้วยการอ้างอิงทั้งหมดที่ใช้รุ่นที่แน่นอนแล้วคุณไม่สนใจเกี่ยวกับ
composer.lock
อย่างไรก็ตามไม่กี่เดือนต่อมาคุณเพิ่มการอ้างอิงใหม่ (หรืออัปเดตการอ้างอิงเก่า) และการอ้างอิงของการพึ่งพานี้ไม่ได้ใช้รุ่น EXACT ถ้าอย่างนั้นจะเป็นการดีกว่าที่จะดูแลcomposer.lock
ในตอนแรก
นอกจากนั้นยังมีข้อดีของรุ่นความหมายมากกว่ารุ่นที่แน่นอน เราอาจอัปเดตการอ้างอิงหลายครั้งในระหว่างการพัฒนาและห้องสมุดมักมีการเปลี่ยนแปลงเล็กน้อยเช่นการแก้ไขข้อบกพร่อง จากนั้นง่ายต่อการอัพเกรดการพึ่งพาซึ่งใช้ semantic version