วิธีบังคับให้นักแต่งเพลงติดตั้งไลบรารีใหม่


106

ฉันใช้แอป ZF2 skeleton และมี. gitignore ที่ป้องกันไม่ให้ไลบรารีภายนอกถูกคอมไพล์ ในขณะที่แก้ไขข้อบกพร่องฉันชอบไปและเปลี่ยนสิ่งต่างๆที่นี่และที่นั่นในแหล่งที่มาของไลบรารีเพื่อเรียนรู้ว่าสิ่งต่างๆทำงานอย่างไร หากสิ่งเหล่านี้เป็นเวอร์ชันที่ควบคุมได้การเปลี่ยนกลับสู่สถานะเดิมจะทำได้ง่ายมาก

ฉันจะบังคับให้ Composer ติดตั้งเฟรมเวิร์กเฉพาะใหม่ได้อย่างไรเพื่อให้ได้สำเนา -unmodified- ใหม่อีกครั้ง

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


2
ทางเลือกหนึ่งคือการลบ composer.lock แล้วเรียกใช้การติดตั้งผู้แต่ง
vascowhite

คำตอบ:


50

คุณสามารถใช้--prefer-sourceแฟล็กสำหรับผู้เรียบเรียงเพื่อเช็คเอาต์แพ็กเกจภายนอกด้วยข้อมูล VCS (ถ้ามี) คุณสามารถเปลี่ยนกลับสู่สถานะเดิมได้ นอกจากนี้หากคุณออกตัวcomposer updateแต่งคำสั่งจะตรวจพบการเปลี่ยนแปลงใด ๆ ที่คุณทำในเครื่องและถามว่าคุณต้องการทิ้งหรือไม่

ไฟล์. gitignore ของคุณเกี่ยวข้องกับโปรเจ็กต์รูทของคุณ (โครงกระดูก ZF2) และป้องกันไม่ให้ผู้จำหน่าย (ซึ่งเป็น libs บุคคลที่สามของคุณอยู่) ไม่ให้กระทำกับ VCS ของคุณเอง ไฟล์ละเว้นไม่เกี่ยวข้องกับ git repo ของผู้ขายของคุณ


7
ในตอนแรกคำแนะนำ -prefer-source ของคุณใช้ไม่ได้จนกว่าฉันจะรู้ว่าฉันต้องลบและติดตั้งไลบรารีทั้งหมดใหม่เพื่อให้สิ่งนี้ทำงานได้ตามที่ฉันต้องการจากนั้นcomposer status -vให้ข้อมูลพร้อมกับการเปลี่ยนแปลง
Julian

174

เพียงแค่ล้างโฟลเดอร์ผู้ขายของคุณ

rm -rf vendor/*

@Loenix ปลดล็อคพวกเขา
Halfstop

8
ฉันเคยมีกรณีที่แคชภายในเครื่องเสียหายดังนั้นแม้หลังจากลบไดเร็กทอรีผู้ขายฉันก็ยังคงติดตั้งการอ้างอิงที่ใช้งานไม่ได้ composer clearcacheเป็นส่วนเสริมที่ดีในกรณีเช่นนี้
okdewit

4
ดูเหมือนว่าจะเป็นแนวทางที่รุนแรงมากเมื่อพิจารณาว่าผู้แต่งต้องติดตั้งแพ็คเกจทั้งหมดใหม่เมื่อ OP ต้องการติดตั้งแพ็คเกจใหม่เพียงชุดเดียว composer require vendor/packageจะทำในสิ่งที่ OP ต้องการและใช้เวลาน้อยลงด้วย ฉันแปลกใจเล็กน้อยที่หลายคนโหวตคำตอบนี้
frederickjh

หากผู้แต่ง clearcache ไม่ทำงานคุณสามารถลบไดเร็กทอรี /home/[username]/.cache ซึ่งจะบังคับให้ดาวน์โหลดซ้ำ มีประโยชน์หากคุณใช้ Packagist ของนักแต่งเพลงส่วนตัวนอกเหนือจาก packagist.composer.org และมีคนทำการเปลี่ยนแปลงโดยไม่ต้องเพิ่มแท็กใหม่
Neil Davis

2
นักแต่งเพลงไม่จำเป็นต้องติดตั้งในไดเร็กทอรีผู้จำหน่ายเท่านั้นดังนั้นแม้ว่าจะเป็นวิธีที่ใช้งานหนัก แต่ก็ไม่สามารถใช้ได้ในทุกสถานการณ์
ummdorian

39

ฉันไม่ต้องการลบแพ็คเกจทั้งหมดในvendor/ไดเรกทอรีดังนั้นนี่คือวิธีที่ฉันทำ:

  1. rm -rf vendor/package-i-messed-up
  2. composer install อีกครั้ง

5
หรือ 'นักแต่งเพลงต้องการผู้ขาย / แพ็คเกจ -i-messed-up' ก็จะดีเช่นกัน
aarcarr

1
หากไม่ได้ผลคุณอาจเรียกใช้composer clearcacheก่อนในกรณีที่แคชเสียหายด้วยเหตุผลบางประการ
Sean the Bean

27

ฉันทำอะไรไป:

  1. ลบโฟลเดอร์ของไลบรารีนั้น
  2. composer update --prefer-source vendor/library-name

มันดึงไลบรารีอีกครั้งพร้อมกับ git repo


หากไม่ได้ผลคุณอาจเรียกใช้composer clearcacheก่อนในกรณีที่แคชเสียหายด้วยเหตุผลบางประการ
Sean the Bean


3

ตามที่ผู้ใช้ @aaracrr ชี้ให้เห็นในความคิดเห็นเกี่ยวกับคำตอบอื่นอาจเป็นคำตอบที่ดีที่สุดคือต้องการแพ็คเกจอีกครั้งที่มีข้อ จำกัด เวอร์ชันเดียวกัน

กล่าวคือ.

composer require vendor/package

หรือระบุข้อ จำกัด ของเวอร์ชัน

composer require vendor/package:^1.0.0

2

ด้วยเหตุผลบางประการไม่มีใครแนะนำวิธีที่ชัดเจนและตรงไปตรงมาที่สุดในการบังคับให้ติดตั้งใหม่:

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