composer.json vs composer.lock

Première installation

Toutes les dépendantes du projet sont définies dans composer.json. Quand on exécute composer pour la première fois avec composer install, ce dernier va créer un fichier composer.lock qui va contenir les versions exactes de toutes les dépendances installées du projet. Par la suite, si une tierce personne installe le projet, composer va utiliser le fichier composer.lock plutôt que composer.json. C’est donc très intéressant d’un point de vue travail en équipe.

Quid des mises à jour

Que se passe t-il lors de la mise à jour via composer update ou composer update dependency ? Dans ce cas composer va lire le fichier composer.json pour obtenir les contraintes des versions, puis va ré-écrire le fichier composer.lock

Dépendances de dépendances

Si vous avez un projet P qui a une dépendance A, A ayant une dépendance B 1.2.*. Si A contient un composer.lock qui spécifie une version 1.2.4 pour B, alors composer installera quand même la dernière version de B (1.2.9 par exemple). Les composer.lock des dépendances sont donc ignorées.