Comment mettre à jour une seule dépendance de compositeur?
Je m'attendais à ce que
composer update videlalvaro/php-amqplib
Ne mettrait à jour qu'une seule dépendance, mais au lieu de cela, il met à jour tout.
Qu'est-ce que je manque?
PS: cette dépendance est définie comme "videlalvaro/php-amqplib": "2.2.0"
dans composer.json
PPS: la version du compositeur utilisée est 3da05c68f9561fa822c522b1815435ff990493ff 2013-10-02 14:25:06
Ppp: la sortie réelle:
$ composer.phar update videlalvaro/php-amqplib --no-dev
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.
Problem 1
- symfony/icu v1.2.0 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it.
- symfony/icu v1.2.0 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it.
- Installation request for symfony/icu == 1.2.0.0 -> satisfiable by symfony/icu[v1.2.0].
2 réponses
La commande composer update videlalvaro/php-amqplib
met simplement à jour cette dépendance. Cependant, il ne désactive pas l'autre vérification de dépendance effectuée par Composer.
Ce dont se plaint le message d'erreur, c'est que la lib-icu n'est pas disponible sur votre système. Apparemment, cela serait résolu en installant L'extension PHP Intl.
Vous verriez des problèmes similaires si vous faisiez une mise à jour de compositeur sur un projet qui nécessitait PHP 5.5 dans l'un de ses requires, rétrogradé en PHP 5.4, puis exécuté composer update sur un separate require, qui ne nécessitait pas PHP 5.5. Même si vous ne mettriez pas à jour le require qui nécessite PHP 5.5, les exigences pour ce paquet ne seraient pas résolvables, et donc Composer échouerait.
Dans votre cas, même si vous essayez simplement de mettre à jour videlalvaro/php-amqplib
vers la dernière version, les exigences pour symfony/icu
ne sont pas remplies, et la mise à jour du compositeur échoue.
Modifier
Pour essayer d'être utile, je suppose que vous avez réinstallé PHP depuis la dernière mise à jour, et soit supprimé ou oublié d'installer L'extension PHP Intl. Composer ne peut pas satisfaire de manière satisfaisante les exigences de votre compositeur.json est en train de définir, et donc par défaut de ne rien faire, plutôt que de faire sciemment une mise à jour où les exigences ne sont pas remplies.
Donc, fondamentalement, vous devez installer les extensions PHP nécessaires pour votre installation de logiciel à exécuter, puis Compositeur sera en mesure de mettre à jour le package unique que vous souhaitez mettre à jour, ainsi que de rencontrer les exigences pour les autres colis.
Tl; dr:
, Vous pouvez lister plus d'un dépendance de mise à jour en une seule commande:
composer update one/dependency second/dependency other/dependency
Histoire:
Si vous voulez mettre à jour une seule dépendance (composer update some/dependency
), Vous pouvez rencontrer un problème que la demande n'est pas satisfaisante en raison d'une autre dépendance est installée dans une mauvaise version. Et celui-ci ne doit pas nécessairement être listé dans votre composer.json
, cela pourrait être juste une dépendance d'une autre dépendance.
Par exemple, je voulais mettre à jour seulement et seulement google/apiclient
, mais l'appel à composer update google/apiclient
s'est plaint, que google/auth
(dépendance d'apiclient) nécessite guzzlehttp/psr7
dans la version 1.2.3
. J'avais 1.3.0
installé. Le guzzlehttp/psr7
n'était pas répertorié dans Mon composer.json
. Ce que je devais faire, c'était d'appeler:
composer update guzzlehttp/psr7 google/apiclient
Et c'est tout! Il suffit de mettre à jour le paquet que vous voulez, et si composer vous dit, que vous devez mettre à jour (ou rétrograder :-)) un autre paquet, listez-le dans la commande.