Il n'y a pas de réponse exacte à cela.
De manière générale, composer ne devrait pas faire ce que le système de construction est censé faire et vous ne devriez pas mettre composer.lock dans VCS. Le compositeur pourrait étrangement l'avoir à l'envers. Les utilisateurs finaux plutôt que les produits ne devraient pas utiliser de fichiers de verrouillage. Habituellement, votre système de construction conserve des instantanés, des répertoires réutilisables, etc. plutôt qu'un répertoire vide à chaque fois. Les utilisateurs extraient une lib du composeur peut souhaiter que cette lib utilise un verrou afin que les dépendances avec lesquelles la lib se charge soient testées.
D'un autre côté, cela augmente considérablement la charge de la gestion des versions, où vous voudriez presque certainement plusieurs versions de chaque bibliothèque car les dépendances seront strictement verrouillées. Si chaque bibliothèque est susceptible d'avoir une version légèrement différente, vous avez besoin d'une prise en charge de plusieurs versions de bibliothèque et vous pouvez également voir rapidement la taille des dépendances nécessaires, d'où le conseil de la garder sur la feuille.
En tenant compte de cela, je ne trouve vraiment pas que les fichiers de verrouillage soient utiles, que ce soit des bibliothèques ou vos propres fichiers de travail. Il n'est utilisé que pour moi dans ma plate-forme de création / test, qui conserve tous les actifs acquis en externe uniquement en les mettant à jour sur demande, fournissant des versions répétables pour les tests, la construction et le déploiement. Bien que cela puisse être conservé dans VCS, il n'est pas toujours conservé avec l'arborescence source, les arbres de construction seront soit ailleurs dans la structure VCS, soit gérés par un autre système ailleurs. S'il est stocké dans un VCS, il est discutable de le conserver ou non dans le même référentiel que les arbres source, car sinon chaque pull peut apporter une masse d'actifs de construction. J'aime bien avoir tout dans un repo bien organisé à l'exception de la production / des informations d'identification sensibles et du ballonnement.
SVN peut le faire mieux que git car il ne vous oblige pas à acquérir l'intégralité du dépôt (bien que je soupçonne que ce n'est pas strictement nécessaire pour git non plus, mais le support est limité et il n'est pas couramment utilisé). Les dépôts de build simples ne sont généralement qu'une branche de superposition dans laquelle vous fusionnez / exportez l'arborescence de build. Certaines personnes combinent des ressources externes dans leur arbre source ou séparent d'autres arbres externes, de génération et de source. Il sert généralement à deux fins, la mise en cache des builds et les builds reproductibles, mais parfois le garder séparé à au moins un certain niveau permet également des builds frais / vides et des builds multiples facilement.
Il existe un certain nombre de stratégies pour cela et aucune d'entre elles ne fonctionne particulièrement bien avec la persistance de la liste des sources, sauf si vous conservez une source externe dans votre arborescence de sources.
Ils ont également des choses comme des hachages dans le fichier, comment cela fusionne-t-il lorsque deux personnes mettent à jour des packages? Cela seul devrait vous faire penser que c'est peut-être mal interprété.
Les arguments avancés par les gens pour les fichiers de verrouillage sont des cas où ils ont adopté une vision très spécifique et restrictive du problème. Vous voulez des versions répétables et des versions cohérentes? Incluez le dossier du fournisseur dans VCS. Ensuite, vous accélérez également la récupération des actifs et évitez de dépendre de ressources externes potentiellement cassées lors de la génération. Aucun des pipelines de création et de déploiement que je crée ne nécessite un accès externe, sauf si cela est absolument nécessaire. Si vous devez mettre à jour une ressource externe, c'est une et une seule fois. Ce que le compositeur essaie de réaliser a du sens pour un système distribué, sauf comme mentionné précédemment, cela n'a aucun sens car cela se retrouverait avec un enfer de dépendance de bibliothèque pour les mises à jour de bibliothèque avec des conflits courants et des mises à jour aussi lentes que le plus lent à mettre à jour le package.
De plus, je mets à jour férocement. Chaque fois que je développe, je mets à jour et teste tout. Il y a une très très petite fenêtre pour qu'une dérive importante de la version se faufile. De manière réaliste aussi, lorsque le versioning sémantique est maintenu, ce qui tend à être pour le compositeur, vous n'êtes pas supposé avoir autant de problèmes de compatibilité ou de ruptures.
Dans composer.json, vous mettez les packages dont vous avez besoin et leurs versions. Vous pouvez y verrouiller les versions. Cependant, ces packages ont également des dépendances avec des versions dynamiques qui ne seront pas verrouillées par composer.json (bien que je ne vois pas pourquoi vous ne pouvez pas les mettre vous-même si vous voulez qu'elles soient verrouillées en version) donc quelqu'un d'autre exécutant composer install obtient quelque chose de différent sans le verrou. Vous pourriez ne pas vous en soucier beaucoup ou vous pourriez vous en soucier, cela dépend. Devriez-vous vous en soucier? Probablement au moins un peu, assez pour vous assurer que vous en êtes conscient dans n'importe quelle situation et impact potentiel, mais cela pourrait ne pas être un problème si vous avez toujours le temps de simplement exécuter DRY en premier et de réparer tout ce qui a été mis à jour.
Le compositeur de tracas essaie d'éviter parfois n'est tout simplement pas là et le tracas que les fichiers de verrouillage du compositeur peuvent créer est important. Ils n'ont absolument pas le droit de dire aux utilisateurs ce qu'ils doivent ou ne doivent pas faire en ce qui concerne les actifs de génération par rapport à la source (que ce soit pour rejoindre ou séparer dans VCS), car ce n'est pas leur affaire, ils ne sont ni votre patron ni moi. "Le compositeur dit" ce n'est pas une autorité, ce n'est pas votre officier supérieur et ils ne donnent aucune supériorité à personne à ce sujet. Vous seul connaissez votre situation réelle et ce qu'il y a de mieux pour cela. Cependant, ils pourraient conseiller une ligne de conduite par défaut pour les utilisateurs qui ne comprennent pas comment les choses fonctionnent, auquel cas vous voudrez peut-être suivre cela, mais personnellement, je ne pense pas que ' est un véritable substitut pour savoir comment les choses fonctionnent et être en mesure de bien répondre à vos besoins. En fin de compte, leur réponse à cette question est une meilleure supposition. Les personnes qui créent Composer ne savent pas où vous devez conserver votre composer.lock, pas plus qu'elles ne devraient le faire. Leur seule responsabilité est de vous dire ce que c'est et ce qu'il fait. En dehors de cela, vous devez décider de ce qui vous convient le mieux.
Garder le fichier de verrouillage est problématique pour l'utilisabilité car le compositeur est très secret quant à savoir s'il utilise le verrouillage ou le JSON et n'est pas toujours bien d'utiliser les deux ensemble. Si vous exécutez l'installation, il utilise uniquement le fichier de verrouillage, il apparaîtrait donc si vous ajoutez quelque chose à composer.json, il ne sera pas installé car il n'est pas dans votre verrou. Ce n'est pas du tout intuitif ce que les opérations font vraiment et ce qu'elles font en ce qui concerne le fichier json / lock et parfois cela ne semble même pas logique (l'aide dit que l'installation prend un nom de package mais en essayant de l'utiliser, elle dit non ).
Pour mettre à jour le verrou ou appliquer des modifications à partir du json, vous devez utiliser la mise à jour et vous ne voudrez peut-être pas tout mettre à jour. Le verrou a priorité pour choisir ce qui doit être installé. S'il y a un fichier de verrouillage, c'est ce qui est utilisé. Vous pouvez restreindre quelque peu la mise à jour mais le système n'est toujours qu'un gâchis.
La mise à jour prend un âge, des concerts de RAM. Je soupçonne également que si vous prenez un projet qui n'a pas été touché depuis un certain temps, il ressemble aux versions qu'il a, ce qu'il y aura de plus en plus avec le temps et il ne fait probablement pas cela efficacement, ce qui l'étrangle.
Ils sont très sournois quand il s'agit d'avoir des commandes composites secrètes auxquelles vous ne pouvez pas vous attendre à être composites. Par défaut, la commande composer remove apparaît pour mapper la mise à jour du compositeur et le supprimer du compositeur par exemple.
La question que vous devez vraiment vous poser n'est pas de savoir si vous devez garder le verrou dans votre arbre source ou alternativement si vous devez le conserver quelque part ou non, mais plutôt vous devriez demander ce qu'il fait réellement, alors vous pouvez décider par vous-même quand vous devez persister et où.
Je soulignerai qu'avoir la capacité d'avoir le verrou est très pratique lorsque vous avez une stratégie de persistance de dépendance externe robuste car elle garde une trace de vous les informations utiles pour le suivre (les origines) et le mettre à jour, mais si vous ne le faites pas alors ce n'est ni ici ni là. Ce n'est pas utile quand il est forcé dans votre gorge comme option obligatoire pour qu'il pollue vos arbres sources. C'est une chose très courante à trouver dans les bases de code héritées où les gens ont apporté beaucoup de modifications à composer.json qui n'ont pas vraiment été appliquées et qui sont cassées lorsque les gens essaient d'utiliser composer. Aucun composeur.lock, aucun problème de désynchronisation.