web-dev-qa-db-fra.com

Compositeur: supprimer un paquet, nettoyer les dépendances, ne pas mettre à jour les autres paquets

La situation

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.


La question

Je veux maintenant supprimer phpmd/phpmd de mon projet. Je veux atteindre les points suivants:

  1. Supprimer phpmd/phpmd de composer.json
  2. Supprimer phpmd/phpmd de composer.lock
  3. Supprimer phpmd/phpmd du dossier vendor
  4. Supprimer toutes les dépendances de phpmd/phpmd de composer.lock
  5. Supprimer toutes les dépendances de phpmd/phpmd du dossier vendor
  6. Ne mettez pas à jour 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


Ce que j'ai essayé

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.

38
TachyonVortex

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.

33
kzap

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 .

16
Kevin G.

J'ai trouvé cette réponse ici ,

  1. Supprimez manuellement le package de composer.json.
  2. Supprimez manuellement le dossier du fournisseur.
  3. Exécutez composer install (à partir de votre dossier de projet).

Composer réinstalle les packages répertoriés dans composer.json. 

1
JimB814

Pour supprimer le package des fichiers .json et .lock, vous devez supprimer le package comme suit:

composer remove package-name
1
Lauris Kuznecovs

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.

0
Michael Cordingley