Versionar ou não versionar o composer.lock
Há um bom tempo atrás, debati com um colega de trabalho sobre a necessidade de se versionar o arquivo composer.lock. Na época, tivemos boas discussões referente a isso, então resolvi criar um artigo explicando sobre o que é e a necessidade de se versionar o arquivo composer.lock.
Introdução
O arquivo composer.lock, será criado, caso ele não exista, quando executamos o comando
1 |
composer install |
Nele terá os pacotes e versões definidos no arquivo composer.json, inclusive, toda a as dependências dos pacotes que foram baixados.
Por fim, no arquivo composer.lock, terá toda a hierarquia de pacotes e dependências dos pacotes com as suas versões "bloqueadas".
Motivações e Vantagens
Acredito que com a introdução, você já deve ter adiantado a vantagem de todo o time do projeto baixar os pacotes nas mesmas versões. Mas não é só isso!
Além de garantir de que todo time irá trabalhar utilizando as mesmas versões dos pacotes e suas dependências, você terá uma maior rapidez na instalação desses pacotes, por que o Composer não irá precisar ficar tentando descobrir qual versão de tal pacote ou dependência deverá ser instalado. Tudo já está lá no composer.lock.
Conselho
Não é uma boa prática executar o comando composer update sem um bom motivo. A explicação para isso seria que você irá atualizar todos os pacotes. Isso poderá atualizar algum pacote para um versão quebrada. Logo, acredito que o recomendado seria apenas executar o comando composer install. Irei explicar melhor a seguir.
1. Executar o composer install quando não existe o composer.lock
Executando esse comando, você irá baixar os pacotes definidos no arquivo composer.json, com isso as dependências, e por fim, será gerado o composer.lock com os pacotes nas versões definidas no composer.json.
2. Executar o comando composer install quando existe o composer.lock
Fazendo isso, o Composer irá consulta o composer.lock e baixar exatamente as versões dos pacotes e dependências definidas lá. Aqui, os pacotes será baixados em um velocidade maior, devido as versões das dependências já estarem definidas.
3. Executar o comando composer update
Com esse comando, você irá atualizar todos os pacotes e dependências para uma versão superior a atual. Caso você não tenha deixado a versão dos pacotes estática, claro. Fazer isso não é interessante, pois você poderá atualizar um de seus pacotes para uma versão com problemas. Nessa situação, o composer.lock será atualizado por completo.
Mas aí você me pergunta: "E seu eu quiser atualizar um certo pacote?". Simples. Execute o comando composer update [pacote].
Exemplo:
1 |
composer update firebase/php-jwt |
Com isso, você irá atualizar somente esse pacote e o composer.lock será atualizado pontualmente.
Executar o comando composer install é seguro, pois ele irá adicionar somente o que foi definido no composer.json
Executar o comando composer update, sem definir o pacote, não é tão seguro assim, pois ele irá atualizar a versão de todos os pacotes e dependências automáticamente
Conclusão
Por fim, será muito interessante você versionar o arquivo composer.lock e deixar a pasta /vendor no .gitignore. Além de considerar, sempre, utilizar o composer install em vez do composer update.
Espero que eu tenha sido claro sobre as motivações e vantagens em versionar o composer.lock. Espero, também, que os conselhos tenham sido úteis.
Obrigado!