Wie kann man Composer dazu zwingen, eine Bibliothek neu zu installieren?
Lesezeit: 6 Minuten
julianisch
Ich verwende die ZF2-Skelett-App und sie hat eine .gitignore-Datei, die verhindert, dass externe Bibliotheken an Git übergeben werden. Beim Debuggen gehe ich gerne hin und ändere hier und da Dinge im Quellcode der Bibliotheken, um zu lernen, wie die Dinge funktionieren. Wenn diese versioniert wären, wäre es sehr einfach, sie in ihren ursprünglichen Zustand zurückzusetzen.
Wie kann ich Composer dazu zwingen, ein bestimmtes Framework neu zu installieren, damit ich wieder eine frische – unveränderte – Kopie erhalten kann?
PS: Bitte schlagen Sie nicht vor, die .gitignore-Datei zu entfernen, da sie aus einem bestimmten Grund vorhanden ist; Es verhindert, dass meine Bibliotheken von Drittanbietern in das Repository meiner App gelangen. Ich kann sie immer während einer automatisierten Bereitstellung installieren.
Gleiches gilt für das Laravel-Framework: Es ignoriert auch den Vendor-Ordner.
Eine Möglichkeit wäre, composer.lock zu löschen und dann composer install auszuführen
– Vascowhite
26. Oktober 2013 um 20:14 Uhr
Composer Neuinstallation Anbieter/Paket
– PaulH
6. Juli um 11:01 Uhr
Zoran
Erst ausführen composer clearcache
Löschen Sie dann Ihren Lieferantenordner
rm -rf vendor/*
oder noch besser, entfernen Sie einfach das spezifische Modul, das Probleme verursacht, um zu vermeiden, dass Sie es erneut herunterladen müssen.
@Loenix, schalte sie frei.
– Halbstopp
23. Januar 2018 um 20:02 Uhr
Ich hatte Fälle, in denen der lokale Cache beschädigt war, also habe ich selbst nach dem Löschen des Herstellerverzeichnisses immer wieder eine defekte Abhängigkeit neu installiert. composer clearcache ist in solchen Fällen eine gute Ergänzung.
– okay
5. Februar 2018 um 9:14 Uhr
Dies scheint ein sehr radikaler Ansatz zu sein, wenn man bedenkt, dass Composer dann alle Pakete neu installieren muss, wenn das OP nur ein Paket neu installieren muss. composer require vendor/package wird tun, was das OP will, und das auch in kürzerer Zeit. Ich bin ein bisschen überrascht, dass so viele diese Antwort positiv bewertet haben.
– Friedrichjh
17. Mai 2019 um 11:40 Uhr
Wenn Composer Clearcache nicht funktioniert, können Sie /home/ löschen[username]/.cache-Verzeichnis. Das erzwingt einen erneuten Download. Nützlich, wenn Sie neben packagist.composer.org privates Composer-Packagist verwenden und jemand Änderungen vornimmt, ohne ein neues Tag hinzuzufügen.
– Neil Davis
29. August 2019 um 12:30 Uhr
Composer wird nicht unbedingt nur im Herstellerverzeichnis installiert, daher funktioniert es selbst als schwerfälliger Ansatz nicht in allen Situationen.
– ummdorianisch
5. Februar 2020 um 21:11 Uhr
Du kannst den … benutzen --prefer-source Flag für Composer, um externe Pakete mit den VCS-Informationen auszuchecken (falls vorhanden). Sie können einfach zum ursprünglichen Zustand zurückkehren. Auch wenn Sie die ausstellen composer update Der Befehl Composer erkennt alle Änderungen, die Sie lokal vorgenommen haben, und fragt, ob Sie sie verwerfen möchten.
Ihre .gitignore-Datei bezieht sich auf Ihr Stammprojekt (ZF2-Skelett) und verhindert, dass das Herstellerverzeichnis (in dem sich Ihre Bibliotheken von Drittanbietern befinden) an Ihr eigenes VCS gebunden wird. Die Ignore-Datei hat nichts mit den Git-Repositorys Ihrer Anbieter zu tun.
Anfangs funktionierte Ihr Vorschlag -prefer-source nicht, bis mir klar wurde, dass ich alle Bibliotheken entfernen und neu installieren musste, damit dies wie beabsichtigt funktionierte, und dann composer status -v gab mir die Info mit den Änderungen.
– Julian
26. Oktober 2013 um 20:48 Uhr
Das hat bei mir nicht funktioniert, seit 2021-05 können wir verwenden composer reinstall <package-name>
– PaulH
6. Juli um 11:26 Uhr
Ich wollte nicht alle Pakete löschen vendor/ Verzeichnis, also habe ich es so gemacht:
rm -rf vendor/package-i-messed-up
composer install wieder
oder ‘Komponist benötigt Anbieter/Paket-i-durcheinander’ wäre auch gut
– aarcarr
24. Mai 2018 um 10:33 Uhr
Wenn das nicht funktioniert, könnten Sie laufen composer clearcache zuerst für den Fall, dass der Cache aus irgendeinem Grund beschädigt wurde.
– Sean die Bohne
26. September 2019 um 14:31 Uhr
Das ist der richtige Weg. Und zur Verdeutlichung muss /vendor/ entfernt werden, damit Composer es aus der Sperrdatei neu installieren kann. Wenn man nur das -Verzeichnis entfernt und das -benannte Verzeichnis hinterlässt, zB /vendor//, dann wird es nicht neu installiert.
– Elijah Lynn
27. Januar 2021 um 18:03 Uhr
Was ich getan habe:
Der Ordner dieser bestimmten Bibliothek wurde gelöscht
2021-05 wurde der Befehlspatch “reinstall” zusammengeführt: https://github.com/composer/composer/pull/9915 – Es ist in der Composer-Version 2.1.0 und allen späteren Versionen verfügbar.
Das reinstall Befehl wird zusammengeführt und ist seitdem verfügbar 2.1.0:
composer reinstall <package-name> # Removes and installs the package.
Kuya
Installieren Sie die Abhängigkeiten neu. Entfernen Sie den Herstellerordner (manuell) oder per rm-Befehl (wenn Sie sich im Projektordner befinden, sicher) unter Linux zuvor:
Dadurch werden der Ordner des Pakets aus /vendor, die Zeile aus composer.json und der gesamte Datensatz des Pakets aus composer.lock entfernt, wobei nicht verwendete Abhängigkeiten entfernt werden und Abhängigkeiten, die von anderen Paketen verwendet werden, nicht entfernt werden
Installieren Sie dann das bevorzugte mit dem Befehl:
composer require vendor/package:version
Dadurch wird das Paket mit der gewünschten Version direkt installiert, indem eine Zeile zu composer.json hinzugefügt wird, ein Datensatz zu composer.lock und allen erforderlichen abhängigen Paketen hinzugefügt wird. Wenn es ein Paket gibt, das in mehr als einem Paket verwendet wird, versucht Composer, die passende Version zu installieren alle mit Paketen. Gelingt dies nicht, stürzt es mit entsprechender Fehlermeldung ab
Verknüpfungen
Wie installiere ich eine bestimmte Version des Pakets mit Composer?
Wie entferne ich ein Paket aus Laravel mit Composer?
Bitte fügen Sie Ihrer Antwort eine Erklärung hinzu, damit andere daraus lernen können – dies sieht für mich nicht nach einer guten Lösung aus, da die Möglichkeit besteht, dass sich die Abhängigkeiten anderer Pakete ändern
– Nico Haase
28. Februar 2021 um 10:34 Uhr
Ich habe so viele Erklärungen wie möglich hinzugefügt. Diese Befehle sind von Composer nativ und werden von der SO-Community empfohlen. Wenn Sie weitere Erklärungen benötigen, schreiben Sie bitte, was genau Sie sehen möchten, ich werde versuchen zu antworten
– Ilja Kolesnikow
1. März 2021 um 13:21 Uhr
Gibt es einen guten Grund, nicht anzurufen? composer install nach dem Entfernen des Paketordners aus dem Herstellerverzeichnis? Dadurch würden alle unnötigen Änderungen in der Sperrdatei übersprungen
– Nico Haase
1. März 2021 um 13:58 Uhr
Das Entfernen des Anbieterverzeichnisses ist keine native Aktion, composer remove ist ein Befehl, mit dem ein Paket entfernt werden muss, Composer erfordern – um es zu installieren. Das manuelle Bearbeiten von Elementen wie composer.json, composer.lock, /vendor ist eine schlechte Vorgehensweise. Das Entfernen des gesamten Ordners ist langsam und unnötig composer install Für eine neue Version des Pakets müssen Sie die Datei composer.json bearbeiten, was eine schlechte Vorgehensweise ist, wenn Sie dies im Abschnitt „require“ tun.
– Ilja Kolesnikow
1. März 2021 um 15:18 Uhr
“Beweise”? Nein. Aber haben Sie Beweise dafür, dass bei der Neuinstallation genau dieselbe Version dieses Pakets installiert wird, die zuvor verwendet wurde?
– Nico Haase
1. März 2021 um 15:20 Uhr
13590700cookie-checkWie kann man Composer dazu zwingen, eine Bibliothek neu zu installieren?yes
Eine Möglichkeit wäre, composer.lock zu löschen und dann composer install auszuführen
– Vascowhite
26. Oktober 2013 um 20:14 Uhr
Composer Neuinstallation Anbieter/Paket
– PaulH
6. Juli um 11:01 Uhr