Disons que j'ai un projet avec deux paquets installés par Composer:
php composer.phar require 'squizlabs/php_codesniffer:~2.0' 'phpmd/phpmd:~2.1'
Le fichier composer.json
généré automatiquement ressemble à ceci:
{
"require": {
"squizlabs/php_codesniffer": "~2.0",
"phpmd/phpmd": "~2.1"
}
}
Dans le fichier composer.lock
généré automatiquement, il y a les deux packages demandés:
2.0.0 squizlabs/php_codesniffer
2.1.3 phpmd/phpmd
et aussi quatre dépendances de phpmd/phpmd
:
2.0.4 pdepend/pdepend
2.5.9 symfony/config
2.5.9 symfony/dependency-injection
2.5.9 symfony/filesystem
Quelques jours plus tard, squizlabs/php_codesniffer
version 2.1.0
est publié, mais je ne veux pasexécuter update
pour le moment. Je veux rester sur la version 2.0.0
pour le moment, et peut-être que je lancerai update
dans quelques jours.
Je veux maintenant supprimer phpmd/phpmd
de mon projet. Je veux atteindre les points suivants:
phpmd/phpmd
de composer.json
phpmd/phpmd
de composer.lock
phpmd/phpmd
du dossier vendor
phpmd/phpmd
de composer.lock
phpmd/phpmd
du dossier vendor
squizlabs/php_codesniffer
vers la version 2.1.0
Edit: Je préférerais une solution qui ne nécessite pas de changer la contrainte de version De squizlabs/php_codesniffer
dans composer.json
Si je cours:
php composer.phar remove phpmd/phpmd
cela permet d'obtenir des points 1, 2, 3, 6 , mais pas des points 4, 5 .
Les dépendances de phpmd/phpmd
restent dans composer.lock
et dans le dossier vendor
.
Si je cours:
php composer.phar remove phpmd/phpmd
php composer.phar update
cela permet d'obtenir des points 1, 2, 3, 4, 5 , mais pas le point 6 .
squizlabs/php_codesniffer
est mis à jour vers la version 2.1.0
.
Supprimez l'entrée de composer.json
puis exécutez composer update phpmd/phpmd
.
Pourquoi cette solution est-elle efficace? Je n'ai aucune idée, mais c'est ce qui est nécessaire pour supprimer totalement un paquet de composer.lock
et /vendor
et vous permettre d'installer un nouveau paquet/remplacement/en conflit.
Faire ceci:
php composer.phar remove phpmd/phpmd
Modifiez le fichier composer.json afin qu'il contienne la section obligatoire suivante.
{
"require": {
"squizlabs/php_codesniffer": "2.0.*",
}
}
Maintenant, lancez composer.phar update
. Cela devrait vous amener où vous voulez être.
Note: Vous pouvez aussi épingler le paquet php_codesniffer sur une version spécifique, par exemple. 2.0.0
. Vous trouverez plus d’informations sur la gestion des versions du compositeur sur ici .
J'ai trouvé cette réponse ici ,
composer install
(à partir de votre dossier de projet).Composer réinstalle les packages répertoriés dans composer.json.
Pour supprimer le package des fichiers .json et .lock, vous devez supprimer le package comme suit:
composer remove package-name
Je ne crois pas que cela soit actuellement possible. C’est le genre de chose que vous pouvez souhaiter soumettre en tant que demande de fonctionnalité à Composer.
En attendant, je pense que votre meilleur pari est de choisir l'option 1: php composer.phar remove phpmd/phpmd
Cela supprimera le paquet de vos dépendances explicites sans vous obliger à mettre à jour quoi que ce soit. Les dépendances obsolètes de votre bibliothèque supprimée resteront jusqu'à votre prochaine exécution de composer update
, ce que vous devriez faire de temps en temps de toute façon. La plupart des fichiers des anciennes dépendances doivent être configurés pour un chargement automatique, de sorte que vous ne devriez pas avoir de réelle pénalité pour conserver ces fichiers autrement que pour l'espace utilisé sur le disque.