:::: MENU ::::

Composer: install vs update

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 oque é 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 dependencias 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”, qualquer tag acima de 2.x, por exemplo 2.0.1, a minha depêndencia irá atualizar quando eu rodar o composer update.

Até ai tudo bem, né? a idéia, no caso, é essa…

Mas agora, notem que um arquivo chamado composer.lock foi criado e agora 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 vocês verão informações como essa:

"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, 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 ele vai ler este 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? Ai 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? aaa a tag entrou agora. Puts e agora? em que tag eu tava? que commit eu tava?

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