A esta altura do campeonato, para trabalhar com PHP muito provavelmente você já está usando Composer, certo? Certo!

O Composer, para a maioria dos casos, funciona muito bem com seu uso básico. Mas existem alguns macetes do Composer bastante úteis que, certamente, ajudarão com seu workflow de desenvolvimento PHP.

Atualizar somente 1 vendor

Se for preciso atualizar apenas uma dependência específica, sem atualizar todas as outras, isso é fácil com o Composer. Basta adicionar o nome do vendor como argumento para o comando update:

Isso só vai instalar ou atualizar aquela dependência específica (mais suas dependências, se necessário) e substituir o composer.lock.

Fazer isso também é útil para consertar um aviso que pode aparecer em nossos terminais:

Se você já foi um dos desafortunados que leu essas palavras, deve ter pensando “Mas o que há de errado com minhas dependências?”. Isso acontece quando você edita seu arquivo composer.json. Por exemplo, se você adiciona ou edita algum detalhe — descrição, autores, parâmetros extras ou até mesmo algum espaço em branco –, isso muda o md5sum do arquivo. Então o Composer avisa que o hash difere do composer.lock.

Mas como proceder? O comando update é o que atualiza o arquivo .lock, mas pode haver o caso em que você adicionou alguma informação e não quer atualizar qualquer dependência. Para estes casos, basta executar:

Adicionar dependência sem editar composer.json

Para adicionar uma nova dependência ao seu projeto, você pode manualmente adicionar uma linha no seu composer.json e usar o método que acabou de ser mostrado para instalar somente aquele pacote. Mas existe uma maneira mais fácil de se fazer isso.

O comando require serve para estas ocasiões:

Ele também pode ser usado para iniciar um novo projeto rapidamente. O comando init, acompanhado da opção --require, criar o arquivo composer.json com o(s) pacote(s) especificado(s):

Note a opção -n, que serve para não fazer quaisquer perguntas interativa enquanto o Composer trabalha.

Fork fácil

Falando na criação automática do composer.json, você conhece o comando create-project?

Isso clona automaticamente o repositório e faz o checkout da versão especificada. Usar isso torna-se bastante útil para clonar rapidamente uma biblioteca sem ter que procurar o URI através dos fontes.

Cache de pacotes dist

“dist” é uma versão empacotada dos dados da dependência. Geralmente, trata-se de uma versão estável.

Pacotes dist são cacheados no seu diretório home — levando em conta que você não é um garoto e trabalha num sistema *NIX. Composer automaticamente salva os arquivos quando você usa um pacote dist. Por padrão, pacotes dist são usados para versões com tags (ex.: “symfony/symfony”: “v2.1.4”) ou versões com coringa ou range (exs.: “2.1.*” e “>=2.2,<2.3-dev") se você usa "stable" no minimum-stability.

Mas pacotes dist também podem trabalhar com branches (ex.: dev-master), tal como o GitHub permite baixar de uma referência git. Para forçar o download de um arquivo — não no sentido de “file”, mas de algo armazenado — ao invés de clonar fontes, use a opção --prefer-dist, incluída nos comandos install e update.

Eis uma demonstração (usando a opção --profile para mostrar o tempo de execução):

Então, o arquivo para twig/twig:1.12.2 foi salvo em ~/.composer/cache/files/twig/twig/1.12.2.0-v1.12.2.zip e usado na segunda vez em que o pacote foi requisitado.

Fonte para editar vendors

Por razões práticas, você pode preferir clonar fontes (sources) ao invés de baixar pacotes. Por exemplo, isso pode ser útil para editar uma biblioteca diretamente no diretório “vendor” para testar o comportamento da sua aplicação com alguma alteração (ex.: bug fix). A opção --prefer-source força a clonagem de fontes ao invés de baixar através de algo arquivado:

Então, para ver os arquivos modificados no seu vendor:

Composer também avisa quando você tenta atualizar um vendor que foi modificado e pergunta se você quer descartar as mudanças:

Esteja pronto para a Produção

Apenas como aviso, antes do deploy do código para o ambiente de Produção, não esqueça de otimizar o autoloader do Composer:

Isso também pode ser usado enquanto instala pacotes através da opção --optimize-autoloader — sem esta otimização, é possível notar uma diferença de performance de 20~25%.

Estes macetes do Composer, na verdade, podem ser todos encontrados na documentação oficial — e há muita coisa boa no cheatsheet interativo do Composer disponibilizado por JoliCode.

Mas, com certeza, ajuda bastante disponibilizar esses macetes num formato mais amigável, certo? :-)