จะอัพเดตไลบรารีเดียวด้วย Composer ได้อย่างไร


311

ฉันต้องติดตั้งเพียง 1 แพ็คเกจสำหรับการแจกจ่าย SF2 ของฉัน (DoctrineFixtures)

เมื่อฉันวิ่ง

php composer.phar update

ฉันเข้าใจ

  - Updating twig/twig (dev-master 39d94fa => v1.13.0)
    The package has modified files:
    M CHANGELOG
    M doc/filters/batch.test
    M doc/filters/index.rst
    M doc/filters/url_encode.rst
    M doc/functions/index.rst
    M doc/tags/index.rst
    M doc/tests/index.rst
    M lib/Twig/Autoloader.php
    M lib/Twig/Compiler.php
    M lib/Twig/CompilerInterface.php
-10 more files modified, choose "v" to view the full list

ดูเหมือนว่านักพัฒนาล่าสุดจะแก้ไขไฟล์จำนวนมากภายในผู้ขาย

เพื่อที่จะหลีกเลี่ยงสิ่งนี้ฉันได้ลอง

php composer.phar update <package_name>

แต่ดูเหมือนจะไม่ทำงาน ฉันจะอัปเดต / ติดตั้งไลบรารีเดียวจาก composer.json ได้อย่างไร


คุณกำลังใช้คำสั่งที่ถูกต้อง คุณช่วยโชว์ให้เราดูได้composer.jsonไหม
cheesemacfly

โปรดลองด้วยคำสั่งที่ให้ไว้ในคำตอบของฉันมิฉะนั้นโปรดให้รายละเอียดของข้อผิดพลาดที่คุณได้รับ (เช่นเอาต์พุตของนักแต่งเพลงหากผู้แต่งร้องทุกข์)
Nicolai Fröhlich

ผู้แต่งของคุณอาจอ้างถึงทางเลือกอื่นของโครงการ
iconoclast

ฉันอัปเดตการพึ่งพาเฉพาะในโครงการ laravel ของฉันและระบุองค์ประกอบเฉพาะเพื่อติดตั้งอย่างชัดเจน: leravelcollective / html ดูเหมือนว่าจะทำงาน
marko

คำตอบ:


526

หากต้องการติดตั้งdoctrine/doctrine-fixtures-bundleกับเวอร์ชั่น2.1.*และความเสถียรขั้นต่ำให้@devใช้สิ่งนี้:

composer.phar require doctrine/doctrine-fixtures-bundle:2.1.*@dev

จากนั้นให้อัปเดตแพ็คเกจเดียวเท่านั้น:

composer.phar update doctrine/doctrine-fixtures-bundle

9
อาจเป็นประโยชน์: การรันการอัปเดต / ติดตั้งด้วย -vvv (โหมด verbose: composer.phar update -vvv แพ็คเกจ / แพ็คเกจ) บางครั้งอาจดีกว่าเพราะบางครั้งพรอมต์แบบโต้ตอบจะปรากฏขึ้นซึ่งอาจซ่อนอยู่เป็นอย่างอื่น
timhc22

1
จะเกิดอะไรขึ้นถ้ามีข้อผิดพลาดในแพ็คเกจอื่น ๆ ? (ในกรณีของฉันติดตั้งหยุด)
Thomas Decaux

2
สิ่งที่เกี่ยวกับความต้องการทริกเกอร์การปรับปรุงแพคเกจที่แตกต่างกัน
hakre

1
สิ่งที่คุณต้องการรู้ ได้โปรด specfic เพิ่มเติมได้ไหม? คุณต้องการที่จะรู้ว่ามันอาจเกิดขึ้นได้ที่แพคเกจอื่น - อย่างชัดเจนrequireก่อนหรือดาวน์โหลดก่อนหน้านี้เป็นการพึ่งพา - จะได้รับการปรับปรุงโดยอัตโนมัติเมื่อเรียกใช้composer require <package>:<version-constraint>@<stability-flag>คำสั่ง?
Nicolai Fröhlich

7
> composer.phar อัปเดตชุดคำสั่งหลักคำสอน / ชุดติดตั้งเพิ่มเติมรวมอยู่ด้วย ((
podarok

184

หากคุณต้องการอัปเดตแพ็กเกจไม่กี่อันและไม่ใช่ทั้งหมดคุณสามารถแสดงรายการแพ็กเกจดังกล่าวได้:

php composer.phar update vendor/package:2.* vendor/package2:dev-master

คุณยังสามารถใช้ wildcard เพื่ออัปเดตแพ็คเกจจำนวนมากในคราวเดียว:

php composer.phar update vendor/*
  • --prefer-source : ติดตั้งแพ็คเกจจากsourceเมื่อพร้อมใช้งาน
  • --pre-dist-dist : ติดตั้งแพ็คเกจจากdistเมื่อพร้อมใช้งาน
  • ละเลยแพลตฟอร์ม reqs : ไม่สนใจphp, hhvm, lib-*และext-*ข้อกำหนดและบังคับให้ติดตั้งแม้ว่าเครื่องท้องถิ่นไม่ปฏิบัติเหล่านี้ ดูเพิ่มเติมที่platform ตัวเลือกการกำหนดค่า
  • --dry วิ่ง : จำลองคำสั่งโดยไม่ทำอะไรเลย
  • - วันที่ : ติดตั้งแพคเกจที่ระบุไว้ในrequire-dev (นี่คือพฤติกรรมเริ่มต้น)
  • --no-dev : require-devแพคเกจติดตั้งข้ามที่ระบุไว้ใน รุ่นออโต้โหลดข้ามautoload-devกฎ
  • --no-โหลด : ข้ามการสร้าง autoloader
  • --no-สคริปต์ : ข้ามการดำเนินการของสคริปต์ที่กำหนดไว้ใน composer.json
  • --no-ปลั๊กอิน : ปิดใช้งานปลั๊กอิน
  • --no-ความคืบหน้า : ลบจอแสดงผลความคืบหน้าที่สามารถยุ่งกับเทอร์มินัลหรือสคริปต์บางอย่างที่ไม่จัดการอักขระ backspace
  • --optimize-autoloader (-o) : แปลงการ PSR-0/4 เป็น classmap เพื่อรับ autoloader ที่เร็วขึ้น แนะนำให้ใช้กับการผลิตเป็นพิเศษ แต่อาจต้องใช้เวลาสักครู่จึงใช้งานได้ตามปกติ
  • --ล็อค : อัปเดตแฮชไฟล์ล็อกเท่านั้นเพื่อระงับคำเตือนเกี่ยวกับไฟล์ล็อคที่ล้าสมัย
  • --with-อ้างอิงกัน: เพิ่มการกันทั้งหมดของแพ็กเกจรายการที่อนุญาตพิเศษให้กับรายการที่อนุญาต
  • --prefer มั่นคง : ชอบรุ่นที่มีความเสถียรของการอ้างอิง
  • - เตรียมการต่ำสุด : ชอบการอ้างอิงรุ่นต่ำสุด --prefer-stableที่เป็นประโยชน์สำหรับการทดสอบรุ่นที่น้อยที่สุดของความต้องการใช้โดยทั่วไปด้วย

โปรดทราบว่าผู้ใช้ ZSH อาจต้องใส่vendor/*เครื่องหมายคำพูด:composer update "vendor/*"
ZeroThe2nd

51

ความแตกต่างระหว่างการติดตั้งอัพเดตและจำเป็น

สมมติว่าสถานการณ์ต่อไปนี้:

composer.json

"parsecsv/php-parsecsv": "0.*"

ไฟล์ composer.lock

  "name": "parsecsv/php-parsecsv",
            "version": "0.1.4",

1.1.0รุ่นล่าสุดคือ รุ่นล่าสุด0.*คือ0.3.2

ติดตั้ง: composer install parsecsv/php-parsecsv

จะทำการติดตั้งเวอร์ชั่น0.1.4ตามที่ระบุในไฟล์ล็อค

อัปเดต: composer update parsecsv/php-parsecsv

0.3.2นี้จะอัปเดตแพคเกจเพื่อ รุ่นสูงสุดที่เกี่ยวกับผู้แต่งของคุณ รายการในcomposer.lockจะได้รับการอัปเดต

จำเป็นต้อง: composer require parsecsv/php-parsecsv

1.1.0ซึ่งจะปรับปรุงหรือติดตั้งรุ่นใหม่ล่าสุด composer.lockไฟล์และไฟล์ของคุณcomposer.jsonจะได้รับการอัปเดตเช่นกัน


ที่น่ากลัวเพื่อที่จะฟื้นฟูหนึ่งแพคเกจภายในรุ่น จำกัด มันcomposer update author/packageแล้วcomposer install author/package
วิลเลียม Randokun

@ WilliamRandokun หากคุณติดตั้งมาก่อนแล้วก็composer update packageเพียงพอแล้วไม่จำเป็นต้องโทรติดตั้งหลังจากนั้น
Adam

1
สิ่งที่ฉันกำลังมองหา อธิบายอย่างดี upvoted
Kapitan

14

คุณสามารถทำการติดตั้งแพ็คเกจใหม่ได้เช่นกัน

php composer.phar require

จากนั้นเทอร์มินัลจะขอให้คุณป้อนชื่อของแพคเกจสำหรับการค้นหา

$ Search for a package []: //Your package name here

เทอร์มินัลจะถามรุ่นของแพคเกจ (หากคุณต้องการให้รุ่นล่าสุดปล่อยว่างไว้)

$ Enter the version constraint to require (or leave blank to use the latest version) []: //your version number here

จากนั้นคุณเพียงกดปุ่มย้อนกลับ เทอร์มินัลจะขอแพคเกจอื่นถ้าคุณไม่ต้องการติดตั้งอีกเพียงกดปุ่มส่งคืนและคุณจะทำ


6

คุณสามารถใช้คำสั่งต่อไปนี้เพื่อปรับปรุงโมดูลใด ๆ ที่มีการอ้างอิง

composer update vendor-name/module-name --with-dependencies

5

เพื่อให้แน่ใจว่าผู้แต่งอัปเดตหนึ่งแพคเกจติดตั้งแล้วเป็นเวอร์ชันล่าสุดภายใต้ข้อ จำกัด เวอร์ชันที่คุณได้ตั้งไว้ใน composer.json ให้ลบแพ็คเกจออกจากผู้จำหน่ายแล้วดำเนินการ:

php composer.phar update vendor/package

4
คุณจะได้พบกับข้อเสนอแนะของที่เหมือนกันในโพสต์นี้: github.com/composer/composer/issues/3112 PS: ลงคะแนนโดยไม่มีคำอธิบายเป็นเรื่องง่ายที่จะทำและไร้ประโยชน์ดังนั้น
Tsounabe

5

เพียงแค่ใช้

composer require {package/packagename}

ชอบ

composer require phpmailer/phpmailer

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


2

เนื่องจากคุณต้องการติดตั้งแพ็คเกจเฉพาะ "ฉันต้องติดตั้งเพียง 1 แพ็คเกจสำหรับการแจกจ่าย SF2 ของฉัน (DoctrineFixtures)"

php composer.phar require package/package-name:package-version จะเพียงพอ

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