Olá, conterrâneos.
Hoje é um belo dia pra falar de códigos, certo? Talvez não seja um dia tão bom quanto aqueles que o cara do picolé e o cara do algodão doce passam ao mesmo tempo na frente de casa. Mas é um bom dia.
Bom, muita gente me pergunta: “Waldemar o que é o certo: eu usar composer update ou install?” “Waldemar o que é composer?”.
Em primeiro lugar, espero que todos saibam o que é composer, quem não souber dá uma olhada em https://getcomposer.org/ e comece a usar AGORA!
O composer, nosso quiridoooo gerenciador de dependências do PHP, às vezes cria dúvidas no pessoal, então resolvi explicar um pouco do funcionamento dele e como podemos diferenciar a hora de usar o update e o install.
Bom, logo que defino as minhas dependências no meu arquivo composer.json (que é o responsável por armazenar a minha lista de dependências e as informações das mesmas), eu rodo o comando composer update. Como o próprio nome já diz, ele vai ler as minhas dependências e atualizar quando for preciso. Hmm, legal, empolgante… mas como ele faz isso? Bom, vamos por partes.
Definindo dependências
No meu composer.json, eu vou definir as dependências que eu quero, mais ou menos como o exemplo abaixo:
"require": { "php": ">=5.4.16", "cakephp/cakephp": "~3.0", "mobiledetect/mobiledetectlib": "2.*", "cakephp/migrations": "~1.0", "cakephp/plugin-installer": "*" }
O Composer update
Se olhar bem, eu estou dizendo que preciso de algumas dependências com certas regras de versão (não vou me apegar a isso, espero que quem não saiba leia a documentação do composer). Na maioria delas, sempre que uma tag for atualizada, provavelmente a minha vendor também irá atualizar, como no caso da dependência “mobiledetectlib” – em qualquer tag acima de 2.x, por exemplo 2.0.1, a minha dependência irá atualizar quando eu rodar o composer update.
Até ai tudo bem, né? A ideia, no caso, é essa…
Mas, agora, notem que um arquivo chamado composer.lock foi criado e podemos usar o comando composer install.
O Composer Install
Depois de rodarmos o primeiro composer update e gerarmos um composer.lock, vamos dar uma olhada nesse arquivo, no qual vocês verão informações como estas:
"name": "cakephp/cakephp", "version": "3.0.10", "source": { "type": "git", "url": "https://github.com/cakephp/cakephp.git", "reference": "2bb38807a5a0ba91d27ec80e702dea6a3bb21e53" }
De cara dá pra ver que ele salva as informações da dependência que foi salva, em qual versão ela estava e uma das coisas mais importantes: a “referência” ao commit da tag que ele baixou. Com isso, nós podemos simplesmente deletar a vendor “cakephp” e rodar o comando composer install, que ele vai ler esse arquivo e instalar exatamente a mesma vendor que estava, mesmo que ela tenha tags novas ou commits novos.
Composer Update vs Composer Install
Tá, mas, Waldemar, o que a diferença do install e do update altera no livre arbítrio da minha vida? Aí eu digo: cara, como assim? Sério, cara? Não, cara… Vou te dar um exemplo, cara.
Eu fiz todas as minhas coisas, a minha release está pronta no meu computador ou no meu servidor de teste, tudo rodando lindo, então é hora de atualizar a produção.
Entro no servidor de produção, dou um pull na minha branch do git, rodo minhas migrações e rodo também o composer update; bem nesse intervalo, entra uma tag nova em uma de minhas dependências, ela é instalada e infelizmente deu algum erro… direto na produção? Como eu não vi isso no meu ambiente de testes? Ahhhh, a tag entrou agora. Putz, e agora? Em que tag eu estava? Em que commit eu estava?
Nesse momento, você passa a entender a importância do composer install. Coloque o seu composer.lock atualizado no seu repositório git e, quando for para produção, rode o composer install para ter a segurança de instalar as dependências nas versões que você estava usando no seu ambiente de desenvolvimento.
Conclusão
Use o composer update em seu ambiente local ou de teste sempre para manter suas dependências atualizadas.
Sempre commit seu composer.lock em seu controlador de versões.
Tente sempre usar composer install em produção para que ele use as mesmas dependências que você estava usando no ambientes de teste e local.
Bom, galera, espero ter ajudado vocês com estas informações – são coisas que podem dar uma certa dor de cabeça.
Até a próxima, um grande abraço!