Quelles sont les différences entre la mise à jour du compositeur et l'installation du compositeur?

160

Quelles sont les différences entre composer updateet composer install?

Dawlatzai Ghousi
la source

Réponses:

297

mise à jour du compositeur

composer update mettra à jour vos dépendances telles qu'elles sont spécifiées dans composer.json

Par exemple, si vous avez besoin de ce package en tant que dépendance:

"mockery/mockery": "0.9.*",

et que vous avez effectivement installé la 0.9.1version du package, l'exécution composer updateentraînera une mise à jour de ce package (par exemple vers 0.9.2, s'il a déjà été publié)

en détail composer update:

  • Lis composer.json
  • Supprimez les packages installés qui ne sont plus nécessaires dans composer.json
  • Vérifiez la disponibilité des dernières versions de vos packages requis
  • Installez les dernières versions de vos packages
  • Mettre composer.lockà jour pour stocker la version des packages installés

installation du compositeur

composer installne mettra rien à jour; il installera simplement toutes les dépendances comme spécifié dans le composer.lockfichier

En détail:

  • Vérifiez si le composer.lockfichier existe (sinon, exécutez-le composer-updateet créez-le)
  • Lire le composer.lockfichier
  • Installez les packages spécifiés dans le composer.lockfichier

Quand installer et quand mettre à jour

  • composer updateest principalement utilisé dans la 'phase de développement', pour mettre à jour nos packages de projet en fonction de ce que nous avons spécifié dans le composer.jsonfichier,

  • composer install est principalement utilisé dans la «phase de déploiement» pour installer notre application sur un serveur de production ou sur un environnement de test, en utilisant les mêmes dépendances stockées dans le fichier composer.lock créé par composer update.

Moppo
la source
5
Vous n'avez pas décrit ce qui se passera si nous n'avons pas de fichier de verrouillage et appelons installer composer. Belle description btw.
user1954544
1
Chose importante qui pourrait vous mordre un jour - le fichier de verrouillage n'est pas récursif. Si un package a des dépendances définies de manière lâche et si vous récupérez une copie propre d'un projet sur une machine propre, il peut installer différentes versions de dépendances imbriquées, ce qui peut inclure de nouveaux bogues ou même des changements cassants! Particulièrement pertinent sur l'intégration continue et la construction de serveurs. La solution - recherchez le package problématique imbriqué et ajoutez sa bonne version corrigée à json et verrouillez le fichier.
JustAMartin
et composer global updatemet à jour les dépendances dans votre référentiel global sur le système local ( COMPOSER_HOMEvariable env)
Yousha Aleayoub
1
Ensuite, comment pourrais-je mettre à jour en toute sécurité un package spécifique sur un serveur de production?
Michel
@Michel Vous devez d'abord exécuter composer updatesur votre système local et tester votre application, puis télécharger le composer.lock sur votre serveur de production et exécutercomposer install
Amin Shojaei
58

Lorsque vous l'exécutez, composer installil recherchera un fichier de verrouillage et installera tout ce qu'il contient.S'il n'en trouve pas, il lira composer.json, installera ses dépendances et générera un fichier de verrouillage.

Lorsque vous l'exécutez, composer updateil lit simplement composer.json, installe les dépendances et met à jour le fichier de verrouillage (ou crée un nouveau fichier de verrouillage).

Tim Sheehan
la source
23

composer install

  1. Si composer.lockexiste.
    • Traite et installe les dépendances à partir du composer.lockfichier.
  2. Si composer.lockn'existe pas .
    • Le package de processus s'installe à partir de composer.json.
    • Crée le composer.lockfichier en fonction des packages installés.

Selon composer help install::

La commande install lit le composer.lockfichier à partir du répertoire actuel, le traite, télécharge et installe toutes les bibliothèques et dépendances décrites dans ce fichier. Si le fichier n'existe pas, il recherchera composer.jsonet fera de même.


composer update

  1. Traite les dépendances du composer.jsonfichier (installe, met à jour et supprime).
  2. Crée ou met à jour le composer.lockfichier en fonction des modifications.

Selon composer help update::

La commande update lit le composer.jsonfichier dans le répertoire actuel, le traite et met à jour, supprime ou installe toutes les dépendances.


Voir aussi: Compositeur: tout tourne autour du fichier de verrouillage

Kenorb
la source
Le point d'installation 3 du compositeur n'a pas de sens. Si le fichier .lock existe déjà, il le lira simplement et ne le «mettra jamais à jour». Il n'est créé que s'il n'existe pas encore ..
Ben
@Ben J'ai clarifié les points, faites-moi savoir s'ils ont un sens maintenant.
kenorb
3

La meilleure différence entre composer updateetcomposer install

installation du compositeur

Pour ajouter des dépendances, vous devez l'ajouter manuellement au fichier composer.json.

Si le fichier composer.lock existe, installez exactement ce qui est spécifié sur ce fichier

  • Sinon, lisez le fichier composer.json pour voir quelles dépendances doivent être installées
  • Ecrivez le composer.lock avec les informations du projet (dépendances installées)

Aucun composant ne sera mis à jour avec cette commande.

mise à jour du compositeur

Pour ajouter ou supprimer des dépendances, vous devez l'ajouter manuellement au fichier composer.json

  • Le fichier composer.lock sera ignoré
  • Les dépendances du fichier composer.json seront installées et mises à jour (si une dépendance n'est pas installée, elle sera téléchargée)

Si vous ne pouvez pas (ou ne savez pas comment ajouter ou supprimer une bibliothèque, ce qui est en fait facile, ajoutez simplement le nom de la dépendance et la version dans la propriété require du fichier) modifiez le fichier composer.json manuellement ou vous préférez utiliser la ligne de commande à la place, composer a des fonctions spéciales pour cela:

compositeur exigent

Par exemple, si nous voulons ajouter une dépendance avec la ligne de commande, nous allons simplement exécuter

composer require twig/twig

  • Le fichier composer.json sera modifié automatiquement et la nouvelle dépendance sera ajoutée
  • la dépendance sera téléchargée dans le projet

compositeur supprimer

Si vous souhaitez supprimer une dépendance inutilisée, nous exécuterons simplement:

composer remove twig/twig --update-with-dependencies

  • Twig sera supprimé avec toutes ses dépendances
Mayank Dudakiya
la source
1

installation du compositeur

if(composer.lock existed){
   installs dependency with EXACT version in composer.lock file
} else {
   installs dependency with LATEST version in composer.json
   generate the composer.lock file
}

mise à jour du compositeur

composer update = remove composer.lock -> composer install

Pourquoi nous avons besoin de 2 commandes. Je pense que cela peut expliquer par composer.lock.

Imaginez, nous N'avons et , il y a une dépendance ou . Ensuite, il y aura des cas composer.lockcomposer.json"monolog/monolog": "1.0.*""monolog/monolog": "^1.0"

  • Nous travaillons bien aujourd'hui avec la version actuelle des dépendances (par exemple: 1.0.0) mais quelques mois plus tard, la mise à jour des dépendances (par exemple: 1.0.1) et il est possible d'avoir un bug
  • Un autre membre de l'équipe peut avoir une version de dépendance différente s'il s'exécute composer installà une heure différente.

Et si nous utilisons toujours une version EXACT dans composer.jsontel que "monolog/monolog": "1.0.1"?
Nous avons encore besoin composer.lockcar composer.jsonsuivre uniquement la version principale de votre dépendance, il ne peut pas suivre la version des dépendances de dépendance.

Que faire si toutes les dépendances de dépendance utilisent également la version EXACT?
Imaginez que vous commencez avec TOUTES les dépendances qui utilisent la version EXACT, alors vous ne vous souciez pas composer.lock. Cependant, quelques mois plus tard, vous ajoutez une nouvelle dépendance (ou mettez à jour l'ancienne dépendance), et les dépendances de cette dépendance n'utilisent pas la version EXACT. Alors il vaut mieux s'en soucier composer.lockau début.

En plus de cela, il y a un avantage d'une version sémantique sur une version exacte. Nous pouvons mettre à jour la dépendance plusieurs fois au cours du développement et la bibliothèque a souvent de petits changements tels que la correction de bogues. Ensuite, il est plus facile de mettre à niveau la dépendance qui utilise la version sémantique.

Phan Van Linh
la source