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
- Documentação Oficial do Composer. Disponível em <https://getcomposer.org/doc/>. Acesso em 18 de março de 2017.
- Pataki, Daniel. A Beginner’s Guide To Composer. Disponível em <https://scotch.io/tutorials/a-beginners-guide-to-composer>. Acesso em 18 de março de 2017.
- Van De Vreken, Hannes. Tilde and caret version constraints in Composer. Disponível em <https://blog.madewithlove.be/post/tilde-and-caret-constraints/>. Acesso em 19 de março de 2017.