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.
Ich möchte jetzt phpmd/phpmd
aus meinem Projekt entfernen. Ich möchte folgende Punkte erreichen:
phpmd/phpmd
aus composer.json
löschenphpmd/phpmd
aus composer.lock
löschenphpmd/phpmd
aus dem vendor
-Ordnerphpmd/phpmd
aus composer.lock
.phpmd/phpmd
aus dem Ordner vendor
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
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.
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.
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 .
Ich fand diese Antwort hier ,
composer install
aus (innerhalb Ihres Projektordners).Composer installiert die in composer.json aufgelisteten Pakete erneut.
Um ein Paket aus .json- und .lock-Dateien zu entfernen, müssen Sie das Paket folgendermaßen entfernen:
composer remove package-name
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.