Wie kann man den Komponisten zwingen, eine Bibliothek neu zu installieren?

95

Ich verwende die ZF2-Skeleton-App und sie hat einen Gitignore, der verhindert, dass externe Bibliotheken an Git übergeben werden. Während des Debuggens ändere ich gerne hier und da Dinge in der Quelle der Bibliotheken, um zu erfahren, 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 zwingen, ein bestimmtes Framework neu zu installieren, damit ich wieder eine neue, 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 jederzeit während einer automatisierten Bereitstellung installieren.

julianisch
quelle
2
Eine Option wäre, composer.lock zu löschen und dann composer install
vascowhite

Antworten:

47

Sie können das --prefer-sourceFlag für Komponisten verwenden, um externe Pakete mit den VCS-Informationen (falls verfügbar) auszuchecken. Sie können einfach zum ursprünglichen Zustand zurückkehren. Auch wenn Sie einen composer updateBefehl ausgeben, erkennt der Composer alle lokal vorgenommenen Änderungen und fragt, ob Sie sie verwerfen möchten.

Ihre .gitignore-Datei bezieht sich auf Ihr Root-Projekt (ZF2-Skelett) und verhindert, dass das Herstellerverzeichnis (in dem sich die Bibliotheken Ihrer Drittanbieter befinden) auf Ihr eigenes VCS übertragen wird. Die Ignorierdatei hat nichts mit den Git-Repos Ihrer Anbieter zu tun.

Bram Gerritsen
quelle
7
Anfänglich funktionierte Ihr Vorschlag für die bevorzugte Quelle nicht, bis mir klar wurde, dass ich alle Bibliotheken entfernen und neu installieren musste, damit dies wie beabsichtigt funktioniert, und composer status -vgab mir dann die Informationen mit den Änderungen.
Julian
162

Löschen Sie einfach den Ordner Ihres Anbieters

rm -rf vendor/*
Zoran
quelle
@Loenix, schalte sie frei.
Halfstop
7
Ich hatte Fälle, in denen der lokale Cache beschädigt war. Selbst nach dem Löschen des Herstellerverzeichnisses habe ich eine defekte Abhängigkeit immer wieder neu installiert. composer clearcacheist in solchen Fällen eine gute Ergänzung.
Okdewit
3
Dies scheint ein sehr radikaler Ansatz zu sein, wenn man bedenkt, dass der Komponist dann alle Pakete neu installieren muss, wenn im OP nur ein Paket neu installiert werden muss. composer require vendor/packagewird tun, was das OP will und in kürzerer Zeit auch. Ich bin ein bisschen überrascht, dass so viele diese Antwort positiv bewertet haben.
Frederickickjh
Wenn der Composer Clearcache nicht funktioniert, können Sie das Verzeichnis /home/[username‹/.cache löschen. Das erzwingt einen erneuten Download. Nützlich, wenn Sie zusätzlich zu packagist.composer.org den privaten Komponisten packagist verwenden und jemand Änderungen vornimmt, ohne ein neues Tag hinzuzufügen.
Neil Davis
2
Composer wird nicht unbedingt nur im Herstellerverzeichnis installiert, sondern funktioniert auch als hartnäckiger Ansatz nicht in allen Situationen.
Ummdorian
34

Ich wollte nicht alle Pakete im vendor/Verzeichnis löschen , also habe ich es so gemacht:

  1. rm -rf vendor/package-i-messed-up
  2. composer install nochmal
Yerke
quelle
4
oder 'Komponist benötigt Verkäufer / Paket-ich-durcheinander' wäre auch gut
aarcarr
1
Wenn dies nicht funktioniert, werden Sie möglicherweise composer clearcachezuerst ausgeführt, falls der Cache aus irgendeinem Grund beschädigt wurde.
Sean the Bean
26

Was ich getan habe:

  1. Der Ordner dieser bestimmten Bibliothek wurde gelöscht
  2. composer update --prefer-source vendor/library-name

Es holt die Bibliothek wieder zusammen mit seinem Git-Repo

Attila Fulop
quelle
Wenn dies nicht funktioniert, werden Sie möglicherweise composer clearcachezuerst ausgeführt, falls der Cache aus irgendeinem Grund beschädigt wurde.
Sean the Bean
3

Wie Benutzer @aaracrr in einem Kommentar zu einer anderen Antwort hervorhob, besteht die wahrscheinlich beste Antwort darin, das Paket mit derselben Versionsbeschränkung erneut anzufordern.

dh.

composer require vendor/package

oder Angeben einer Versionsbeschränkung

composer require vendor/package:^1.0.0
frederickjh
quelle
1

Aus irgendeinem Grund schlug niemand den offensichtlichen und direktesten Weg vor, um eine Neuinstallation zu erzwingen:

> composer remove vendor-name/package-name && composer vendor-name/package-name
Jewgen
quelle
Ich
arbeite