Breve Tutorial sobre Composer

Introdução

Neste artigo vamos aprender basicamente como funciona o composer. O composer é uma ferramenta de gerenciamento de dependências de pacotes para PHP. Ele permite você informar quais as dependências de pacotes que o seu projeto necessita e as instala para você.

Instalando o composer.
Usando o composer
Autoload
Criando e distribuindo o seu próprio pacote
Instalando pacotes PEAR pelo composer
Comandos Práticos

Instalando o composer

O composer roda a partir de um pacote phar (php >=5.2). O suporte à pacotes phar deve estar habilitado no php.ini (descomentar linha extension=phar.so).

Para instalar o composer é bem simples, você pode seguir as instruções citadas aqui, ou simplesmente executar o comando abaixo em um terminal Linux dentro do diretório root do seu projeto:

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

Após a execução do comando acima, você encontrará um arquivo chamado composer.phar dentro do diretório corrente. Você já pode começar a utilizar os recursos dele.

Usando o composer

Após instalar o composer.phar no diretório root do seu projeto, vamos usá-lo criando o arquivo de configuração composer.json no mesmo diretório.

Vamos supor que você deseja utilizar a lib do monolog em seu projeto, insira o conteúdo abaixo dentro do composer.json:

{
    "require": {
        "monolog/monolog": "1.2.*"
    }
}

Após isso, execute o comando abaixo para que o composer instale o monolog e as dependências necessárias para que ele funcione corretamente em seu projeto:

php composer.phar install

Toda configuração no composer.json é baseado no formato JSON.

O composer criará automaticamente um diretório chamado vendor, onde ele armazena os arquivos dos pacotes baixados. Também é criado um arquivo chamado autoload.php que é responsável por fazer o autoload dos pacotes instalados por ele.

Veja abaixo um exemplo de uso do monolog após a instalação:

<?php
require_once("vendor/autoload.php");

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('/tmp/app.log', Logger::WARNING));

// add records to the log
$log->addWarning('Foo');

Voltando um pouco ao arquivo composer.json, podemos observar o palavra-chave require. Ela define quais serão as dependências utilizadas pelo seu projeto.

Logo abaixo do require, nós especificamos o pacote monolog/monolog. O nome do pacote requerido deve seguir o padrão <vendor name>/<nome do pacote>. Isso ajuda em caso de nomes de pacotes iguais porem distribuídos por diferentes usuários/empresas.

Também é possível especificar a versão desejada do pacote que deseja instalar como dependência. Em nosso exemplo, usamos 1.2.*. Que significa pacote mais atual entre versões >= 1.2 e < 1.3. Após a instalação das dependências, o composer cria um arquivo chamando composer.lock contendo as versões exatas instaladas. Dessa forma, ele trava o projeto em versões específicas. Isso significa que qualquer um que configurar o projeto, o composer irá fazer o download sempre das mesmas versões, mantendo a compatibilidade entre diferentes ambientes de desenvolvimento e produção.

O composer não atualiza automaticamente os pacotes para novas versões. Caso queira checar por novas versões, é necessário solicitar ao composer manualmente através do parâmetro update:

php composer.phar update

(Caso algum pacote for atualizado, a versão exata será marcada no arquivo composer.lock).

Autoload

Você também pode usar o composer para fazer o autoload das classes do seu projeto baseado na PSR-0 ou PSR-4, para mais detalhes aconselho a ler meu artigo sobre o assunto: PHP Autoload PSR-4/PSR-0 com composer.

Criando e distribuindo o seu próprio pacote

Você deve estar se perguntando de onde o composer busca os pacotes configurados para instalação no composer.json ? O composer possui um repositório padrão de pacotes chamado Packagist. Qualquer dúvida que você tenha sobre algum pacote que esteja disponível via composer, basta acessar o site do Packagist e fazer uma busca.

Além disso você pode criar o seu próprio pacote e disponibilizar para os outros, sem muito esforço.

Para criar o seu próprio pacote:

  1. crie um arquivo composer.json dentro do diretório raiz do seu projeto, contendo as informações básicas sobre o pacote: (Para mais detalhes sobre os parâmetros de configuração, verificar o link)
  2. {
        "name": "your-vendor-name/package-name",
        "description": "A short description of what your package does",
        "require": {
            "php": ">=5.3.0",
            "another-vendor/package": "1.*"
        }
    }
    
  3. Publique seu projeto em um repositório central, como o github
  4. No caso do github, é aconselhado manter o your-vendor-name (item acima) como sendo no nome do seu usuário do github. Usando o github, o Packagist também consegue extrair as informações de versão do seu pacote, sem a necessidade de especificar explicitamente no arquivo composer.json. Esse controle é possível através da função de tags do git.

  5. Registre uma nova conta no site do Packagist.
  6. Clique no botão Submit Package e informe a URL do repositório do seu projeto.

Instalando pacotes PEAR pelo composer

É possível instalar pacotes PEAR, disponíveis em qualquer channel, através do composer. Para isso temos que especificar os repositórios do PEAR manualmente no composer.json através do parâmetro de configuração repositories. Também usamos o parâmetro type para indicar que é um repositório de pacotes PEAR.

Ao especificar o pacote PEAR desejado como dependência no parâmetro require, o vendor-name informado deve estar no formato pear-{nome do channel}/. Dessa forma, evitará conflitos caso precise informar mais de um repositório do PEAR no mesmo projeto.

Segue abaixo um exemplo de configuração para instalação do pacote PEAR2_HTTP_Request como dependência. No caso, vamos usar o repositório pear2.php.net:

{
    "repositories": [
        {
            "type": "pear",
            "url": "http://pear2.php.net"
        }
    ],

     "require": {
        "pear-pear2.php.net/PEAR2_HTTP_Request": "*"
    }
}

No exemplo, o vendor-name ficou no padrão pear-{nome do channel}/: pear-pear2.php.net.

Veja abaixo como ficaria no caso de termos que instalar dependências do PEAR que estão em diferentes channels:

{
    "repositories": [
        {
            "type": "pear",
            "url": "http://pear.php.net"
        },
        {
            "type": "pear",
            "url": "http://pear2.php.net"
        }
    ],

     "require": {
        "pear-pear.php.net/Text_CAPTCHA": "*",
        "pear-pear2.php.net/PEAR2_Cache_Lite": "*"
    }
}

Comandos Práticos

Selecionei aqui alguns comandos do composer que podem ser úteis e economizar o seu tempo no dia a dia.

  • Caso queira atualizar somente uma das dependências do seu projeto, sem atualizar as outras. Basta especificar o nome do pacote após o comando update:
  • php composer.phar update "monolog/monolog"
  • É possível adicionar uma nova dependência sem a necessidade de editar o arquivo composer.json. No caso do comando abaixo, a dependência será adicionada ao arquivo composer.json e somente ela será instalada.
  • php composer.phar require "phpunit/phpunit=4.5.*"
  • Use o comando abaixo para atualizar a própria versão do composer para a mais atual possível:
  • php composer.phar self-update
  • Use o comando abaixo para melhorar a performance do autoload. É recomendado executar sempre que for fazer o deploy em produção. Somente não é feito por padrão pois dependendo do caso pode demorar um bom tempo para finalizar sua execução. Em projetos grandes, com muitas dependências, o ganho é bastante significativo.
  • php composer.phar dump-autoload --optimize
Please follow and like us:

Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: