Blog

composer.lock, un débat inutile

Je suis parfois tombé sur des débats de développeurs indiquant qu’ils ne versionnaient pas le fichier composer.lock. Si, techniquement, rien ne l’empêche, dans les faits, vous vous exposeriez avec le temps à de l’instabilité, surtout dans le cadre d’un travail collaboratif s’étalant sur plusieurs semaines !

En creusant sur le fonctionnement avancé de composer, on comprend que ce fichier bloque les versions des paquets utilisés, assurant ainsi la stabilité de vos applications.

Prenons pour exemple une application nommée « faireDesCookies » 🍪 maintenue par 2 développeurs : Adrien 💁‍♂️ et Gisèle 💁.

Gisèle initialise le projet dont les sources techniques se trouvent sur Gitlab. Elle décide d’utiliser un bundle appelé « gourmandise/faireDesGateaux » en version 1.0.0 (^1.0 dans le composer.json), car bon nombre de fonctions vont lui permettre d’accélérer son développement et, comme dirait l’autre, on ne réinvente pas la roue. Pour une raison obscure, elle décide de ne pas versionner le fichier composer.lock.

Quelques jours plus tard, Adrien vient apporter sa contribution, mais le bundle « gourmandise/faireDesGateaux » est passé en version 1.1.0 avec l’ajout de la fonction « ajouterDesPepitesDeChocolat ». Le fichier composer.lock n’étant pas versionné, et Adrien ne s’en étant pas rendu compte, composer install a pour effet de télécharger la version 1.1.0 de ce paquet sur sa machine de développement.

A ce stade, le paquet dans le composer.lock de Gisèle est bloqué sur la version 1.0.0, alors que celui de Adrien est déjà sur la 1.1.0.

Pour le moment, rien de bien grave, comme il s’agit d’une montée de version mineure (ajout d’une fonction), l’application reste stable chez Adrien.

En lisant la documentation officielle du bundle en v1.1.0, Adrien trouve que la fonction « ajouterDesPepitesDeChocolat » est cool et décide de l’utiliser, il finit par pousser ses modifications pour que Gisèle puisse en bénéficier.

Gisèle qui est notifiée, récupère les modifications de Adrien en faisant un git pull, et composer install.

Sur le git pull, Gisèle a bien remarqué des mises à jour dans le code source de l’application, mais sur le composer install, il ne s’est rien passé, et c’est bien normal !

L’application de Gisèle plante 😨, elle ne peut pas ajouter des pépites de chocolat dans sa préparation puisque elle ne possède pas la version 1.1.0 de « gourmandise/faireDesGateaux » !

En complément, la documentation de composer l’explique ici : https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control

Conclusion: on versionne le composer.lock et, de temps en temps, on en profite pour tout mettre à jour. C’est fait pour ça, alors autant en profiter 👌 !