Devrait compositeur.verrouiller être commis au contrôle de version?

Je suis un peu confus avec composer.lock utilisé dans une application avec un référentiel.

J'ai vu beaucoup de gens dire que nous ne devrions pas .gitignore composer.lock du dépôt.

Si je mets à jour mes bibliothèques dans mon environnement de développement, j'aurai un nouveau composer.lock mais je ne pourrai pas les mettre à jour en production, n'est-ce pas ?

Ne générera-t-il pas des conflits sur ce fichier ?

429
demandé sur Pierre de LESPINAY 2012-10-15 17:36:42

6 réponses

Si vous mettez à jour vos libs, vous voulez également valider le fichier de verrouillage. Il indique essentiellement que votre projet est verrouillé sur les versions spécifiques des bibliothèques que vous utilisez.

Si vous validez vos modifications et que quelqu'un extrait votre code et met à jour les dépendances, le fichier de verrouillage doit être non modifié. Si elle est modifiée, cela signifie que vous avez une nouvelle version de quelque chose.

L'avoir dans le référentiel vous assure que chaque développeur utilise les mêmes versions.

556
répondu meza 2012-10-15 13:39:22

Pour les applications / projets : Certainement oui.

La documentationcomposer indique à ce sujet (avec emphase):

Validez l'éditeur de votre application.de verrouillage (avec le compositeur.json) dans le contrôle de version.

Comme @ meza a dit :vous devriez valider le fichier de verrouillage afin que vous et vos collaborateurs travaillez sur le même ensemble de versions et vous empêcher de dire comme "mais cela a fonctionné sur mon ordinateur". ;-)

Pour les bibliothèques: Probablement pas.

La documentation du compositeur note à ce sujet:

Note: pour les bibliothèques, il n'est pas nécessairement recommandé de valider le fichier de verrouillage (...)

Et les états ici:

Pour votre bibliothèque, vous pouvez valider le compositeur.verrouillage de fichier si vous le souhaitez. Cela peut aider votre équipe à toujours tester les mêmes versions de dépendance. Cependant, ce fichier de verrouillage n'aura aucun effet sur les autres projets qui en dépendent. Il a uniquement un effet sur le projet principal.

Pour les bibliothèques, je suis d'accord avec la réponse de @Josh Johnson.

154
répondu Jeroen Fiege 2017-08-03 10:55:48

Après l'avoir fait dans les deux sens pour quelques projets, ma position est que composer.lock ne devrait pas être engagé dans le cadre du projet. Je sais qu'il est plus facile de le faire, mais veuillez me soutenir pendant que je plaide pour cela.

composer.lock est-ce que les métadonnées de construction ne font pas partie du projet. L'état des dépendances doit être contrôlé par la façon dont vous les versionnez (manuellement ou dans le cadre de votre processus de construction automatisé) et non arbitrairement par le dernier développeur pour les mettre à jour et valider le verrouiller le fichier.

Si vous êtes préoccupé par le fait que vos dépendances changent entre les mises à jour de composer, vous avez un manque de confiance dans votre schéma de gestion des versions. Les Versions (1.0, 1.1, 1.2, etc.) doivent être immuables et vous devez éviter les caractères génériques " dev - "et" X. * " En dehors du développement initial des fonctionnalités.

La validation du fichier de verrouillage est une régression pour votre système de gestion des dépendances car la version des dépendances est maintenant redevenue implicite.

Aussi, votre projet ne devrait jamais avoir à être reconstruit ou avoir ses dépendances réquisitionnées dans chaque environnement, en particulier prod. Votre livrable (tar, zip, phar, un répertoire, etc.) doit être immuable et promu à travers les environnements sans changer d'état.

Edit: je savais que ce ne serait pas une réponse populaire, mais si vous votez, seriez-vous assez gentil pour fournir une raison dans les commentaires qui souligne la faille dans la réponse? Merci!

61
répondu Josh Johnson 2017-01-18 17:37:31
  1. vous ne devriez pas mettre à jour vos dépendances directement sur la Production.
  2. vous devez contrôler la version de votre composer.verrouille le fichier.
  3. vous ne devriez pas contrôler vos dépendances réelles.

1. Vous ne devriez pas mettre à jour vos dépendances directement sur la Production, car vous ne savez pas comment cela affectera la stabilité de votre code. Il pourrait y avoir des bugs introduits avec les nouvelles dépendances, cela pourrait changer la façon dont le code se comporte affectant votre propre, il pourrait être incompatible avec d'autres dépendances, etc. Vous devriez le faire dans un environnement de développement, en suivant des tests D'assurance qualité et de régression appropriés, etc.

2. Vous devez contrôler la version de votre compositeur.verrouillage fichier, car il stocke des informations sur vos dépendances et sur les dépendances de vos dépendances qui vous permettra de reproduire l'état actuel du code. Ceci est important, parce que, tous vos tests et le développement a été fait contre code spécifique. Ne pas se soucier de la version réelle du code que vous avez est similaire à télécharger des modifications de code à votre application et ne pas les tester. Si vous mettez à niveau vos versions de dépendances, cela devrait être un acte volontaire, et vous devriez prendre les précautions nécessaires pour vous assurer que tout fonctionne toujours. Perdre une ou deux heures de temps de revenir à une version précédente version peut vous coûter beaucoup d'argent.

L'un des arguments que vous verrez sur le fait de ne pas avoir besoin du compositeur.verrouillage, c'est que vous pouvez définir la version exacte que vous avez besoin dans votre compositeur.JSON fichier, et que de cette façon, chaque fois que quelqu'un exécute composer install, Il les installera le même code. Ce n'est pas vrai, car vos dépendances ont leurs propres dépendances, et leur configuration peut être spécifiée dans un format qui autorise les mises à jour des subversions, ou peut-être même des versions entières.

Cela signifie que même lorsque vous spécifiez que vous voulez Laravel 4.1.31 dans votre compositeur.json , Laravel dans son compositeur .le fichier json peut avoir ses propres dépendances requises en tant que Symfony event-dispatcher: 2.*. Avec ce type de configuration, vous pourriez vous retrouver avec Laravel 4.1.31 avec Symfony event-dispatcher 2.4.1, et quelqu'un d'autre dans votre équipe pourrait avoir Laravel 4.1.31 avec event-dispatcher 2.6.5, tout dépend de quand a été la dernière fois que vous avez exécuté l'installation du compositeur.

Donc, avoir votre compositeur.lock fichier dans le système de version va stocker la version exacte de ces sous-dépendances, donc, lorsque vous et votre coéquipier installez un compositeur (c'est la façon dont vous allez installer vos dépendances basées sur un compositeur .lock ) vous obtiendrez tous les deux les mêmes versions.

Et si vous voulez mettre à jour? Ensuite, dans votre environnement de développement, exécutez: composer update, cela générera un nouveau compositeur .verrouillez le fichier (s'il y a quelque chose de nouveau) et après l'avoir testé, et le test QA et la régression le testent et d'autres choses. Vous pouvez le pousser pour tout le monde téléchargez le nouveau compositeur .verrouiller , car il est sûr de mettre à niveau.

3. Vous ne devriez pas contrôler vos dépendances réelles , car cela n'a aucun sens. Avec le compositeur .lock vous pouvez installer la version exacte des dépendances et vous n'auriez pas besoin de les valider. Pourquoi voudriez-vous ajouter à votre repo 10000 fichiers de dépendances, alors que vous n'êtes pas censé les mettre à jour. Si vous avez besoin d'en changer un, vous devriez le fourcher et y apporter vos modifications. Et si vous craignez d'avoir à récupérer les dépendances réelles à chaque fois d'une version ou d'une version, composer a différentes façons d'atténuer ce problème, cache, fichiers zip, etc.

24
répondu lebobbi 2017-06-19 08:03:07

Vous validez ensuite le composer.json dans votre projet et tous les autres membres de votre équipe peuvent exécuter composer install pour installer les dépendances de votre projet.

Le but du fichier de verrouillage est d'enregistrer les versions exactes qui sont installées afin qu'elles puissent être réinstallées. Cela signifie que si vous avez une spécification de version de 1.* et votre collègue exécute composer update qui installe 1.2.4, puis valide le compositeur.fichier de verrouillage, lorsque vous compositeur installer, vous obtiendrez également 1.2.4, même si 1.3.0 a été libérés. Cela garantit que tout le monde travaillant sur le projet a la même version exacte.

Cela signifie que si quelque chose a été validé depuis la dernière installation d'un compositeur, alors, sans fichier de verrouillage, vous obtiendrez un nouveau code tiers en cours d'extraction .

Encore une fois, c'est un problème si vous êtes préoccupé par la rupture de votre code. Et c'est l'une des raisons pour lesquelles il est important de penser au compositeur comme étant centré autour du compositeur.verrouillage fichier.

Source: Composer: il S'agit du fichier de verrouillage.


Validez l'éditeur de votre application.de verrouillage (avec le compositeur.json) dans le contrôle de version. Ceci est important car la commande install vérifie si un fichier de verrouillage est présent, et si c'est le cas, elle télécharge les versions qui y sont spécifiées (quel que soit le compositeur.json est dit). Cela signifie que toute personne qui configure le projet téléchargera exactement la même version des dépendances. Votre serveur CI, les machines de production, les autres développeurs de votre équipe, tout et tout le monde fonctionnent sur les mêmes dépendances, ce qui atténue le risque de bogues affectant seulement certaines parties des déploiements. Même si vous développez seul, dans six mois lors de la réinstallation du projet, vous pouvez être sûr que les dépendances installées fonctionnent toujours même si vos dépendances ont publié de nombreuses nouvelles versions depuis.

Source: Compositeur - Utilisation De Base.

4
répondu waanders 2017-06-26 12:30:51

Si vous êtes préoccupé par la rupture de votre code, vous devez valider le composer.lock sur votre système de contrôle de version pour vous assurer que tous les collaborateurs de votre projet utilisent la même version du code. Sans un fichier de verrouillage, vous obtiendrez un nouveau code tiers étant tiré vers le bas à chaque fois.

L'exception est lorsque vous utilisez une meta apps, des bibliothèques où les dépendances doivent être mises à jour lors de l'installation (comme l'application squelette Zend Framework 2). Le but est donc de saisir les dernières dépendances chacune moment où vous voulez commencer à développer.

Source: Compositeur: Il est Tout au Sujet du Fichier de Verrouillage

Voir Aussi: quelles sont les différences entre composer update et composer install?

0
répondu kenorb 2017-06-26 12:43:00