it-swarm.com.de

Komponist: Entfernen Sie ein Paket, bereinigen Sie Abhängigkeiten, aktualisieren Sie keine anderen Pakete

Die Situation

Nehmen wir an, ich habe ein Projekt mit zwei von Composer installierten Paketen:

php composer.phar require 'squizlabs/php_codesniffer:~2.0' 'phpmd/phpmd:~2.1'

Die automatisch generierte composer.json-Datei sieht folgendermaßen aus:

{
    "require": {
        "squizlabs/php_codesniffer": "~2.0",
        "phpmd/phpmd": "~2.1"
    }
}

In der automatisch generierten composer.lock-Datei gibt es die zwei angeforderten Pakete:

  • 2.0.0 squizlabs/php_codesniffer
  • 2.1.3 phpmd/phpmd

und auch vier Abhängigkeiten von phpmd/phpmd:

  • 2.0.4 pdepend/pdepend
  • 2.5.9 symfony/config
  • 2.5.9 symfony/dependency-injection
  • 2.5.9 symfony/filesystem

Ein paar Tage später wird squizlabs/php_codesniffer Version 2.1.0 veröffentlicht, aber ich möchte update noch nicht ausführen. Ich möchte vorerst auf Version 2.0.0 bleiben, und vielleicht werde ich in einigen Tagen update ausführen.


Die Frage

Ich möchte jetzt phpmd/phpmd aus meinem Projekt entfernen. Ich möchte folgende Punkte erreichen:

  1. phpmd/phpmd aus composer.json löschen
  2. phpmd/phpmd aus composer.lock löschen
  3. Löschen Sie phpmd/phpmd aus dem vendor-Ordner
  4. Löschen Sie alle Abhängigkeiten von phpmd/phpmd aus composer.lock.
  5. Löschen Sie alle Abhängigkeiten von phpmd/phpmd aus dem Ordner vendor
  6. Aktualisieren Sie squizlabs/php_codesniffer nicht auf Version 2.1.0.

Edit: Ich würde eine Lösung vorziehen, bei der die Versionseinschränkung von squizlabs/php_codesniffer in composer.json nicht geändert werden muss


Was ich versucht habe

Wenn ich renne:

php composer.phar remove phpmd/phpmd

dies erzielt Punkte 1, 2, 3, 6 , jedoch keine Punkte 4, 5 .

Die Abhängigkeiten von phpmd/phpmd verbleiben im composer.lock und im vendor-Ordner.

Wenn ich renne:

php composer.phar remove phpmd/phpmd
php composer.phar update

dies erzielt Punkte 1, 2, 3, 4, 5 , jedoch keinen Punkt 6 .

squizlabs/php_codesniffer wird auf Version 2.1.0 aktualisiert.

38
TachyonVortex

Entfernen Sie den Eintrag aus composer.json und führen Sie composer update phpmd/phpmd aus.

Warum ist das die Lösung, die funktioniert? Ich habe keine Ahnung, aber das ist es, was erforderlich ist, um ein Paket vollständig aus composer.lock und /vendor zu entfernen und es Ihnen zu ermöglichen, ein neues/replace/Konfliktpaket zu installieren.

33
kzap

Mach das:

php composer.phar remove phpmd/phpmd

Ändern Sie die Datei composer.json so, dass sie den folgenden Abschnitt mit den erforderlichen Anforderungen enthält.

{
    "require": {
        "squizlabs/php_codesniffer": "2.0.*",
    }
}

Führen Sie nun composer.phar update aus. Das sollte dich dahin bringen, wo du sein willst.

Hinweis: Sie können das Paket php_codesniffer auch an eine bestimmte Version anfügen, z. 2.0.0. Weitere Informationen zur Versionierung von Composer finden Sie auf hier .

16
Kevin G.

Ich fand diese Antwort hier ,

  1. Entfernen Sie das Paket manuell aus composer.json.
  2. Herstellerordner manuell löschen.
  3. Führen Sie composer install aus (innerhalb Ihres Projektordners).

Composer installiert die in composer.json aufgelisteten Pakete erneut. 

1
JimB814

Um ein Paket aus .json- und .lock-Dateien zu entfernen, müssen Sie das Paket folgendermaßen entfernen:

composer remove package-name
1

Ich glaube nicht, dass dies derzeit möglich ist. Dies ist die Art von Dingen, die Sie als Funktionsanforderung übergeben an Composer senden möchten.

Inzwischen denke ich, dass Sie am besten mit Option # 1 gehen: php composer.phar remove phpmd/phpmd

Das Paket wird aus Ihren expliziten Abhängigkeiten entfernt, ohne dass Sie etwas aktualisieren müssen. Die veralteten Abhängigkeiten Ihrer entfernten Bibliothek bleiben bis zum nächsten Ausführen von composer update bestehen. Dies sollten Sie sowieso regelmäßig tun. Die meisten Dateien aus den alten Abhängigkeiten sollten so eingestellt sein, dass sie auf die eine oder andere Weise automatisch geladen werden. Aus diesem Grund sollten Sie keine echten Strafen für die Aufbewahrung dieser Dateien außer dem auf der Festplatte verwendeten Speicherplatz haben.

0