Primeiros passos com Composer

Primeiros passos com Composer

Nesse artigo vou mostrar como trabalhar com gerenciador de dependência no ecosistema PHP.

Outro dia estava programando um site com PHP e fiz uma página de contato, e precisava de uma maneira que os dados do formulário fossem enviados para o meu e-mail depois de preenchidos.

Depois de uma pesquisa no Google, vi que uma das bibliotecas mais populares é a SwiftMailer, que é um dos componentes do framework Symfony.

Entrando no site da SwiftMailer, fui para a documentação e vi que a maneira de instalar ela é usando um tal de Composer, com o seguinte comando:

composer require swiftmailer/swiftmailer

No entanto, se eu abrir a linha de comando do meu computador e digitar, ele não encontra esse comando com o nome de “composer”, o que é isso afinal?

Apresentando o Composer

O Composer é um gerenciador de dependências. Ele cuida de baixar e gerenciar as bibliotecas que o seu programa PHP precisa para executar.

Ele é uma das ferramentas principais do PHP moderno, quase todas as bibliotecas e frameworks mais populares fazem uso dele.

O Composer é diferente de um gerenciador de pacotes como o APT ou o Yum do Linux, apesar de ambos tratarem com pacotes o Composer faz isso em um nível de projeto, instalando em um diretório.

Por padrão o Composer não instala nada em nível global no sistema, mas possibilita essa opção caso necessite.

Banner da promoção da black friday, com os dizeres: A Black Friday Alura está chegando. Faça parte da Lista VIP, receba o maior desconto do ano em primeira mão e garanta bônus exclusivos. Quero ser VIP

Instalação

O Composer é um arquivo PHAR, que contém todo o programa em um único arquivo. Para quem veio do Java, é um equivalente ao Jar.

Para utilizar o Composer então, só é necessário baixar esse arquivo PHAR que se encontra na página de download do site oficial do Composer.

Você pode seguir as instruções para o seu sistema operacional específico ou simplesmente baixar o arquivo PHAR da versão mais recente que se encontra no final da página.

Legal! agora para executarmos o Composer, basta irmos no diretório onde baixamos ele, abrirmos a linha de comando, que no Mac e no Linux é acessada a partir de um programa chamado Terminal, e no Windows através do PowerShell, e digitar o seguinte comando:

php composer.phar

E se tiver tudo certinho, serão exibidas os argumentos que o comando do Composer aceita! agora estamos prontos para usá-lo.

Criando projetos com o Composer

Um uso bem comum do Composer vai ser para instalar frameworks como o Symfony, Laravel e o Zend, e para isso o composer oferece o argumento create-project, o que torna muito fácil a criação de um projeto.

Para criar um projeto Laravel usando o Composer:

composer create-project laravel/laravel meu_app_laravel

Para criar um projeto Symfony usando o Composer:

composer create-project symfony/skeleton meu_app_symfony

Para criar um projeto Zend usando o Composer:

composer create-project zendframework/skeleton-application meu_app_zend

Você deve ter se perguntado “mas de onde ele tira estes arquivos?” E o Composer possui um repositório central de pacotes chamado Packagist.

É dele onde o Composer baixa os seus pacotes, e toda a comunidade PHP adotou o Packagist como um lugar padrão para disponibilizar as versões novas das bibliotecas e frameworks.

O Composer também disponibiliza a opção de você utilizar o seu próprio repositório e armazenar o código no Git ao invés do Packagist.

Instalando bibliotecas com o Composer

Se o seu projeto não usa o Composer ainda, você pode inicializá-lo com o comando init.

composer init

Ele fará umas perguntas, como qual o nome do seu projeto, se ele é uma biblioteca ou um projeto, e no final, gerará os arquivos necessários para a utilização do Composer!

É interessante lembrar que frameworks como o Laravel, Symfony, Zend, e Slim já vem com o Composer habilitado.

Quando estamos em um projeto que faz uso do Composer e precisamos instalar uma nova dependência como o SwiftMailer, utilizamos o comando require:

composer require swiftmailer/swiftmailer

Assim que adicionamos uma dependência, o composer cria um arquivo com o nome de composer.json onde ele adiciona todas as dependências dentro de uma propriedade chamada require.

O Composer possui também uma propriedade chamada require-dev, responsável somente pelas dependências requeridas no ambiente de desenvolvimento, como o phpunit, phpspec, phpcs, que não devem ir para o servidor de produção.

Você pode também, ao invés de utilizar o comando require, alterar esse arquivo composer.json, adicionar a sua dependência e executar o comando:

composer install

O comando install baixará todas as dependências em uma pasta criada no mesmo nível do composer.json chamada vendor. Esta pasta vendor vai conter todos os arquivos baixados pelo Composer, as dependências de fato.

Se precisarmos de uma versão específica de uma dependência, por exemplo, se eu quiser utilizar uma versão do Laravel que tem LTS (Long Term Support), sendo que ela não é a versão mais recente, podemos especificar a versão logo depois do nome da biblioteca:

composer create-project laravel/laravel "5.5.*"

Isso serve tanto para o comando create-project quanto para o require, o asterisco significa que se for lançada uma nova versão que comece com 5.5 (como por exemplo: 5.5.1 ou 5.5.2), ela deve ser utilizada.

Se você usa o controle de versão Git no seu projeto com Composer, é muito importante que você coloque a pasta vendor para ser ignorada no arquivo .gitignore, esta pasta pode ficar bem grande e é uma boa prática não incluir ela no repositório.

Agora imagine o seguinte, especificamos que podemos utilizar todas as versões 5.5.* do Laravel, imagine que utilizamos a versão 5.5.2 para desenvolver na nossa máquina, um tempo se passou e quando o próximo desenvolvedor for clonar o repositório Git para desenvolver e executar o composer install, saiu a versão 5.5.3.

Isso seria muito ruim, e poderia causar vários tipos de erros no nosso programa.

Para isso, o composer tem um arquivo que chama composer.lock, esse arquivo tem a finalidade de travar as dependências em uma versão específica.

Quando instalamos uma dependência, precisamos com que todos os outros desenvolvedores tenham a mesma versão, independente se a dependência teve uma atualização.

Com isso, podemos até remover a pasta vendor do nosso projeto e executar o comando composer install, que temos certeza que as dependências baixadas serão as mesmas versões que tínhamos antes.

Mas se precisarmos atualizar uma versão de dependência, é necessário um outro comando:

composer update

Este comando vai atualizar todas as dependências do projeto para a versão mais recente disponível no Packagist e reescrever o arquivo composer.lock.

No entanto, tome cuidado! se o seu programa não estiver preparado para lidar com as versões novas das dependências,ele pode causar erros.

É possível também fazer o update de uma dependência só adicionando o nome dela depois do comando

composer update swiftmailer/swiftmailer

E se precisarmos remover uma dependência, usamos o comando remove:

composer remove swiftmailer/swiftmailer

Acessando arquivos executáveis pelo Composer.

Em uma aplicação real, é muito comum precisarmos desenvolver testes para que a nossa aplicação não sofra com regressão de funcionalidade ou bugs que podem ser criados conforme vamos desenvolvendo.

Uma biblioteca que auxilia com isso no PHP é o PHPUnit, e podemos instalar no nosso projeto utilizando o Composer.

composer require --dev phpunit/phpunit

Observe o --dev utilizado logo depois do require, isso é desejável nessa situação pois o PHPUnit é uma dependência que só faz sentido enquanto estamos no ambiente de desenvolvimento e ela não deve ser instalada no ambiente de produção.

No ambiente de produção, o comando a ser digitado para instalar as dependências é:

composer install --no-dev

O que instalará somente as dependências que podem ser instaladas em um ambiente de produção, excluindo as dependências de desenvolvimento e deixando o ambiente de produção mais enxuto.

Depois de instalarmos dependências que possuem arquivos executáveis instaladas pelo Composer, elas ficam acessíveis no diretório vendor dentro da pasta bin.

Para executarmos o PHPUnit, faremos o seguinte:

php vendor/bin/phpunit

Gostou deste post? você pode descobrir mais sobre o Composer olhando a documentação oficial e se você quiser conhecer mais sobre desenvolvimento de PHP moderno, acesse os cursos de PHP da Alura.

Giovanni Tempobono
Giovanni Tempobono

Giovanni é instrutor na Alura e desenvolvedor de software. Possui um bacharel em Ciência da Computação pelo Mackenzie e gosta muito de conhecer novas linguagens e tecnologias.

Veja outros artigos sobre Programação