Uma breve introdução ao Composer

Vamos supor que você está trabalhando em um projeto PHP e em algum momento você precisa de uma biblioteca para manipulação de strings. Para não reinventar a roda, você decide procurar alguma biblioteca pronta na internet. Você acha uma biblioteca X com os recursos que você precisa e então baixa ela para utilizar em seu projeto. Porém, ao rodar o projeto, descobre que a biblioteca X dependente da biblioteca Y. Sem escolha, você baixa a biblioteca Y e então descobre que ela depende da biblioteca Z; e assim por diante.

É neste inferno de dependências que entra o Composer para nos ajudar. O Composer é uma ferramenta para gerenciar dependências em um projeto PHP. Basta você definir quais bibliotecas que o seu projeto dependente e o Composer vai fazer o trabalho de baixar e atualizar elas e suas dependências.

Instalando o Composer

O Composer é nada mais que um arquivo .phar, que é uma aplicação PHP distribuída em um único arquivo. Ele roda nos principais sistemas operacionais e precisa apenas da versão 5.3.2 ou superior do PHP.

Windows

Para instalar no Windows basta você utilizar o instalador oficial. Ele irá instalar a última versão do Composer e já adicionar no PATH para que você possa utilizá-lo por linha de comando.

Linux

Se você utiliza Linux, basta rodar o comando abaixo para baixar o composer.phar no diretório atual.

curl -sS https://getcomposer.org/installer | php

Desta forma você poderá utilizá-lo localmente. Porém é mais interessante utilizá-lo globalmente, você pode fazer utilizando o comando abaixo.

sudo mv composer.phar /usr/local/bin/composer

Testando a instalação

Para saber se deu certo a instalação, você pode rodar comando abaixo no terminal.

composer --version

Se o comando retornar a versão atual do Composer você está pronto para começar a utilizá-lo.

Definindo as bibliotecas

Agora que já temos o Composer instalado, precisamos definir as bibliotecas que o nosso projeto depende. Para isso vamor criar o arquivo composer.json.

{
  "require": {
    "danielstjules/stringy": "3.0"
  }
}

No exemplo acima, definimos que o nosso projeto dependente da biblioteca Stringy, que é uma biblioteca para facilitar manipulação de strings com PHP.

O Composer utiliza o Packagist como repositório, é lá que você vai encontrar as bibliotecas que você pode utilizar e seus respectivos nomes. Porém, grande parte dos projetos disponibilizados no Github possuem instruções para instalação via Composer.

Instalando as bibliotecas

Definido as bibliotecas, precisamos agora instalá-las. Para isso basta abrir o terminal, navegar até diretório que o arquivo composer.json foi criado e então rodar o comando abaixo.

composer install

O Composer irá baixar as bibliotecas definidas e suas dependências para a pasta vendor e gerar um arquivo de autoload para carregamento automático das classes da biblioteca.

$ composer install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 2 installs, 0 updates, 0 removals
  - Installing symfony/polyfill-mbstring (v1.3.0) Downloading: 100%
  - Installing danielstjules/stringy (3.0.0) Downloading: 100%
Writing lock file
Generating autoload files

Note que nossa biblioteca depende da biblioteca symfony/polyfill-mbstring, porém você não precisa se preocupar com isso, pois o Composer já cuidou disso para você.

Utilizando as bibliotecas

Agora que o Composer já fez o trabalho pesado, basta apenas você incluir o arquivo de autoload em seu projeto e começar a utilizar a biblioteca.

<?php

// Incluindo arquivo de autoload gerado pelo Composer
require 'vendor/autoload.php';

// Importando biblioteca para o arquivo
use Stringy\Stringy;

// Utilizando uma função da biblioteca para criar um slug a partir de uma string
// Retorno: uma-breve-introducao-ao-composer
echo Stringy::create('Uma breve introdução ao Composer')->slugify();

Simples, não?

Especificando versão

No nosso arquivo composer.json, além de especificar as bibliotecas que nosso projeto dependente, podemos definir a versão que precisamos. No nosso exemplo, definimos que precisamos especificamente da versão 3.0 da biblioteca, porém há várias formas de especificar a versão que você precisa.

Operadores lógicos e de comparação

Podemos utilizar os operadores de comparação >, <, >=, <= e também operadores lógicos como AND (,) e OR (||). Exemplos:

  • >=3.0 – maior ou igual a 3.0
  • >=3.0,<3.2 – maior ou igual 3.0 e menor que 3.2

Wildcard (*)

O wildcard é utilizado para definir um padrão no número da versão. Exemplos:

  • 3.* – maior ou igual 3.0 e menor que 4.0
  • 3.2.* – maior ou igual 3.2.0 e menor que 3.3.0

Tilde (~)

O tilde basicamente pode ser utilizado para definir uma versão até o próximo minor release. Exemplos:

  • ~4.1.3 – maior ou igual a 4.1.3 e menor que 4.2.0
  • ~4.1 – maior ou igual a 4.1 e menor que 5.0

Caret (^)

O caret basicamente pode ser utilizado para definir uma versão até o próximo major release. Exemplos:

  • ^4.1.3 – maior ou igual a 4.1.3 e menor que 5.0.0
  • ^4.1 – maior ou igual a 4.1 e menor que 5.0 (igual à ~4.1)

dev-master

Essa opção irá sempre baixar os arquivos mais recentes da biblioteca. Você pode utilizar durante o desenvolvimento, porém deve estar ciente que a chance de conter bugs nesse tipo de versão é maior. Exemplo:

{
  "require": {
    "danielstjules/stringy": "dev-master"
  }
}

Atualizando as bibliotecas

Vimos como instalar as bibliotecas, porém podemos também atualizá-las de acordo com as regras de versão definidas no composer.json. Para atualizar as bibliotecas basta executar o comando abaixo.

composer update

É importante manter as bibliotecas de terceiros atualizadas, pois podem haver correções de segurança e também para a utilização de novos recursos disponibilizados.

Algumas considerações

Ignorando versionamento

Quando utilizamos o Composer junto com alguma ferramenta de versionamento, como o Git,  o ideal é colocar a pasta vendor no .gitignore, pois não precisamos subir as bibliotecas de terceiros e suas dependências para nosso repositório, apenas nosso projeto.

E quando clonarmos o projeto para nossa máquina, basta apenas rodar o composer install para instalar as bibliotecas de terceiros.

Hospedagem compartilhada

Muitos de nossos projetos ficam hospedados em hospedagens compartilhadas, ou seja, não temos acesso a linha de comando, apenas ao FTP para enviar os arquivos.

Sem problemas, basta apenas instalarmos as bibliotecas localmente em nossa máquina e então enviar a pasta vendor junto com o projeto pelo FTP. Desde que você tenha os requerimentos necessários pelas bibliotecas na hospedagem, tudo deve funcionar normalmente.

Conclusão

O Composer traz para o mundo PHP uma forma de gerenciar as dependências do nosso projeto de jeito simples.

Hoje em dia, praticamente todas as bibliotecas e projetos conhecidos já utilizam o Composer. E você também pode criar sua própria biblioteca e disponibilizar para a comunidade.

Além do gerenciamento de dependências, podemos também configurar o Composer para incluir as classes de nosso projeto no autoload, porém isso é assunto para um outro artigo.

Espero que este artigo tenha sido útil para você entender o funcionamento básico do Composer e que você possa começar a utilizá-lo em seus projetos.

Código fonte disponível em: https://github.com/rafaelcouto/uma-breve-introducao-ao-composer/

Referências