Comment mettre à jour une seule bibliothèque avec Composer?

312

Je n'ai besoin d'installer qu'un seul package pour ma distribution SF2 (DoctrineFixtures).

Quand je cours

php composer.phar update

Je reçois

  - Updating twig/twig (dev-master 39d94fa => v1.13.0)
    The package has modified files:
    M CHANGELOG
    M doc/filters/batch.test
    M doc/filters/index.rst
    M doc/filters/url_encode.rst
    M doc/functions/index.rst
    M doc/tags/index.rst
    M doc/tests/index.rst
    M lib/Twig/Autoloader.php
    M lib/Twig/Compiler.php
    M lib/Twig/CompilerInterface.php
-10 more files modified, choose "v" to view the full list

Il semble que le dernier développeur ait modifié de nombreux fichiers à l'intérieur du fournisseur.

Afin de contourner cela, j'ai essayé

php composer.phar update <package_name>

Mais cela ne semble pas fonctionner. Comment puis-je mettre à jour / installer une seule bibliothèque de composer.json?

Outil
la source
Vous utilisez la bonne commande. Pouvez-vous nous montrer votre composer.json?
cheesemacfly
veuillez essayer avec les commandes fournies dans ma réponse sinon veuillez fournir une description de l'erreur que vous obtenez (c.-à-d. sortie du compositeur si le compositeur se plaint)
Nicolai Fröhlich
Votre composer.json peut faire référence à une autre branche d'un projet.
iconoclaste du
J'ai mis à jour une dépendance spécifique dans mon projet laravel et en spécifiant le composant spécifique à installer explicitement: composer update laravelcollective / html. Cela semblait fonctionner.
marko

Réponses:

527

Pour installer doctrine/doctrine-fixtures-bundleavec la version 2.1.*et la stabilité minimale, @devutilisez ceci:

composer.phar require doctrine/doctrine-fixtures-bundle:2.1.*@dev

puis de mettre à jour uniquement ce package unique:

composer.phar update doctrine/doctrine-fixtures-bundle
Nicolai Fröhlich
la source
9
Peut être utile: l'exécution de la mise à jour / installation avec -vvv (mode verbeux: composer.phar update -vvv package / package) peut parfois être meilleure car parfois une invite interactive apparaîtra qui pourrait être autrement cachée
timhc22
1
Et s'il y a des erreurs sur d'autres packages? (Dans mon cas, l'installation s'est arrêtée).
Thomas Decaux
2
Qu'en est-il du besoin qui déclenche une mise à jour d'un package différent?
hakre
1
qu'aimeriez-vous savoir exactement? pouvez-vous être plus précis s'il vous plaît? Voulez-vous savoir s'il peut arriver qu'un autre package - explicitement requireavant ou précédemment téléchargé en tant que dépendance - soit automatiquement mis à jour lors de l'exécution de la composer require <package>:<version-constraint>@<stability-flag>commande?
Nicolai Fröhlich
7
> composer.phar update doctrine / doctrine-fixtures-bundle cela met également à jour tous les autres packages (((
podarok
184

Si vous souhaitez simplement mettre à jour quelques packages et pas tous, vous pouvez les répertorier comme tels:

php composer.phar update vendor/package:2.* vendor/package2:dev-master

Vous pouvez également utiliser des caractères génériques pour mettre à jour un tas de packages à la fois:

php composer.phar update vendor/*
  • --prefer-source : installez les packages sourcelorsqu'ils sont disponibles.
  • --prefer-dist : installe les packages distlorsqu'ils sont disponibles.
  • --ignore-plate-forme reqs : ignorer php, hhvm, lib-*et les ext-*exigences et forcer l'installation même si la machine locale ne remplit pas ces derniers . Voir aussi l' platform option config .
  • --dry-run : simule la commande sans rien faire.
  • --dev : installe les packages répertoriés dans require-dev(c'est le comportement par défaut).
  • --no-dev : Ignore l'installation des packages répertoriés dans require-dev. La génération du chargeur automatique ignore les autoload-devrègles.
  • --no-autoloader : ignore la génération de l'autochargeur.
  • --no-scripts : ignore l'exécution des scripts définis dans composer.json.
  • --no-plugins : désactive les plugins.
  • --no-progress : supprime l'affichage de la progression qui peut perturber certains terminaux ou scripts qui ne gèrent pas les caractères de retour arrière.
  • --optimize-autoloader (-o) : convertit l' autochargement PSR-0/4 en classmap pour obtenir un autochargeur plus rapide. Ceci est particulièrement recommandé pour la production, mais son exécution peut prendre un certain temps, ce qui n'est actuellement pas fait par défaut.
  • --lock : met uniquement à jour le hachage du fichier de verrouillage pour supprimer l'avertissement concernant le fichier de verrouillage obsolète.
  • --with-dependencies : ajoute également toutes les dépendances des packages sur liste blanche à la liste blanche.
  • --prefer-stable : préférez les versions stables des dépendances.
  • --prefer-Lowest : préférez les versions les plus basses des dépendances. Utile pour tester des versions minimales des exigences, généralement utilisées avec --prefer-stable.
Yosvel Quintero Arguelles
la source
Veuillez noter que les utilisateurs ZSH devront peut-être mettre leurs vendor/*guillemets:composer update "vendor/*"
ZeroThe2nd
51

Différence entre installer, mettre à jour et exiger

Supposons le scénario suivant:

composer.json

"parsecsv/php-parsecsv": "0.*"

fichier composer.lock

  "name": "parsecsv/php-parsecsv",
            "version": "0.1.4",

La dernière version est 1.1.0. La dernière 0.*version est0.3.2

installer: composer install parsecsv/php-parsecsv

Cela installera la version 0.1.4comme spécifié dans le fichier de verrouillage

mettre à jour: composer update parsecsv/php-parsecsv

Cela mettra à jour le package vers 0.3.2. La version la plus élevée par rapport à votre composer.json. L'entrée dans composer.locksera mise à jour.

exiger: composer require parsecsv/php-parsecsv

Cela mettra à jour ou installera la dernière version 1.1.0. Votre composer.lockfichier et votre composer.jsonfichier seront également mis à jour.

Adam
la source
génial, donc pour rafraîchir un package dans la version contrainte, c'est composer update author/packageet ensuitecomposer install author/package
William Randokun
@WilliamRandokun si vous l'avez déjà installé, alors composer update packagec'est assez, pas besoin d'appeler install après
Adam
1
exactement ce que je recherche. bien expliqué. upvoted
kapitan
15

Vous pouvez essentiellement faire un suivant pour installer un nouveau package également.

php composer.phar require

alors le terminal vous demandera d'entrer le nom du paquet pour la recherche.

$ Search for a package []: //Your package name here

Ensuite, le terminal demandera la version du package (si vous souhaitez avoir la dernière version, laissez-la vide)

$ Enter the version constraint to require (or leave blank to use the latest version) []: //your version number here

Ensuite, vous appuyez simplement sur la touche retour. Le terminal vous demandera un autre package, si vous ne souhaitez pas en installer un autre, appuyez simplement sur la touche Retour et vous aurez terminé.

orhankutlu
la source
6

Vous pouvez utiliser la commande suivante pour mettre à jour n'importe quel module avec ses dépendances

composer update vendor-name/module-name --with-dependencies
Wolfack
la source
5

Pour vous assurer que composer met à jour un package déjà installé vers la dernière version dans les contraintes de version que vous avez définies dans composer.json, supprimez le package du fournisseur, puis exécutez:

php composer.phar update vendor/package
Tsounabe
la source
4
Vous trouverez la même suggestion dans cet article: github.com/composer/composer/issues/3112 . PS: voter contre sans explication est si facile à faire et si inutile.
Tsounabe
5

Utilisez simplement

composer require {package/packagename}

comme

composer require phpmailer/phpmailer

si le package n'est pas dans le dossier du fournisseur .. composer l'installer et si le package existe compositeur mettre à jour le package vers la dernière version.

Mostafa
la source
2

Parce que vous vouliez installer un package spécifique "Je n'ai besoin d'installer qu'un seul package pour ma distribution SF2 (DoctrineFixtures)".

php composer.phar require package/package-name:package-version serait suffisant

The Anh
la source