Wie kann man Composer dazu zwingen, eine Bibliothek neu zu installieren?

Lesezeit: 6 Minuten

Benutzer-Avatar
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

Benutzer-Avatar
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:

  1. rm -rf vendor/package-i-messed-up
  2. 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:

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

Es ruft die Bibliothek zusammen mit ihrem Git-Repo erneut ab

Benutzer-Avatar
cweiske

Der entsprechende Funktionswunsch lautet https://github.com/composer/composer/issues/3112

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.

Benutzer-Avatar
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:

rm -rf vendor/

composer update -v

https://www.dev-metal.com/composer-problems-try-full-reset/

Kurze Antwort

Sie können es in einem CLI-Befehl mit && ausführen:

composer remove vendor/package && composer require vendor/package:version

Ausführliche Antwort

Vorhandenes Paket per Befehl entfernen:

composer remove vendor/package

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?

Installieren, deinstallieren und aktualisieren Sie Module, Themen usw. mit Composer: https://modulesunraveled.com/drupal-8-composer-and-configuration-management/installing-and-uninstalling-modules-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

1359070cookie-checkWie kann man Composer dazu zwingen, eine Bibliothek neu zu installieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy