J'ai un projet avec quelques dépendances et j'aimerais en installer un autre, mais j'aimerais garder les autres tels qu'ils sont. J'ai donc édité le composer.json
, mais si je lance composer install
, j'obtiens la sortie suivante:
Installing dependencies from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
Your requirements could not be resolved to an installable set of packages.
Problem 1
- laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
- laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
- Installation request for laravel/framework dev-master -> satisfiable by laravel/framework dev-master.
Tout d'abord, j'ai installé mcrypt, donc je ne sais pas pourquoi il s'en plaint.
Alors, comment puis-je installer cette nouvelle dépendance?
Mon compositeur.json:
{
"require": {
"opauth/opauth": "*",
"opauth/facebook": "*",
"opauth/google": "*",
"opauth/twitter": "*",
"imagine/Imagine": "dev-develop",
"laravel/framework": "4.*",
"loic-sharma/profiler": "dev-master"
},
"autoload": {
"classmap": [
"app/libraries",
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/tests/TestCase.php"
]
},
"minimum-stability": "dev"
}
composer-php
dualité_
la source
la source
Réponses:
Pour installer un nouveau package et seulement cela, vous avez deux options:
En utilisant la
require
commande, lancez simplement:Composer devinera la meilleure contrainte de version à utiliser, installera le package et l'ajoutera à
composer.lock
.Vous pouvez également spécifier une contrainte de version explicite en exécutant:
-OU-
À l'aide de la
update
commande, ajoutez manuellement le nouveau package àcomposer.json
, puis exécutez:Si Composer se plaint, en déclarant «Vos exigences n'ont pas pu être résolues en un ensemble de packages installables», vous pouvez résoudre ce problème en passant l'indicateur
--with-dependencies
. Cela mettra en liste blanche toutes les dépendances du package que vous essayez d'installer / mettre à jour (mais aucune de vos autres dépendances).Concernant les problèmes du poseur de questions avec Laravel et mcrypt: vérifiez qu'il est correctement activé dans votre php.ini CLI. Si
php -m
ne répertorie pas mcrypt, il est manquant.Important: N'oubliez pas de préciser
new/package
lors de l'utilisationcomposer update
! L'omission de cet argument entraînera la mise à jour de toutes les dépendances, ainsi quecomposer.lock
.la source
"new/package" : "*",
dans la"require"
section composer.json ?En fait, la bonne solution est:
composer require vendor/package
Tiré de la documentation CLI pour Composer :
Bien qu'il soit vrai que
composer update
installe les nouveaux packages trouvés dans composer.json, il mettra également à jour le fichier composer.lock et tous les packages installés en fonction de toute logique floue (>
ou*
caractères après les deux-points) trouvés dans composer.json! Cela peut être évité en utilisantcomposer update vendor/package
, mais je ne recommanderais pas d'en prendre l'habitude, car vous êtes un argument oublié loin d'un projet potentiellement cassé…Gardez les choses saines et respectez
composer require vendor/package
pour ajouter de nouvelles dépendances! 😉la source
composer require
mettre à jour le fichier composer.lock?Mon cas d'utilisation est plus simple et s'adapte simplement à votre titre mais pas à vos détails.
Autrement dit, je veux installer un nouveau package qui n'est pas encore dans mon
composer.json
sans mettre à jour tous les autres packages.La solution ici est
composer require x/y
la source
Dans mon cas, j'ai eu un repo avec:
.json
.lock
En attendant, A, B, C avaient des versions plus récentes en ce qui concerne la génération du verrou.
Pour une raison quelconque, j'ai supprimé les "fournisseurs" et je voulais faire un
composer install
échec avec le message:J'ai essayé d'exécuter la solution de Seldaek en émettant un
composer update vendorD/libraryD
mais le compositeur a insisté pour mettre à jour plus de choses, donc.lock
j'avais trop de changements vu mon outil git.La solution que j'ai utilisée était:
vendors
dir.VendorD/LibraryD
du fichier.json
.composer install
..json
et extrayez-le à nouveau du référentiel (équivalent à ajouter à nouveau le fichier, mais en évitant les modifications potentielles des espaces blancs).composer update vendorD/libraryD
Il a installé la bibliothèque, mais en plus,
git
diff m'a montré que.lock
seules les nouvelles choses étaient ajoutées sans éditer les autres.(Thnx Seldaek pour le pointeur;))
la source
composer.lock
ne devrait jamais être supprimé et reconstruit avec bonheur..lock
est ... pour le verrouillage !! ; D - sinon le fichier de verrouillage serait inutile et vous ne le commettriez pas ou il n'existerait pas du tout. Si vous exécutez dans une entreprise axée sur la qualité et reconstruisez et validez un verrou avec disons 1.000 dépendances, toutes changeront, et les gens de l'AQ viendront vous tuer hahaha.