Composer: Gerenciamento de Dependências em PHP na Prática Já leu

O que é Composer e por que você precisa dele Composer é o gerenciador de dependências padrão do PHP moderno. Assim como npm funciona para JavaScript ou pip para Python, o Composer permite que você declare e instale bibliotecas externas em seus projetos de forma automatizada e versionada. Se você já cansou de copiar e colar arquivos .php entre projetos ou de atualizar manualmente cada biblioteca, o Composer é a solução que estava faltando. O Composer funciona através de um arquivo chamado , onde você especifica quais pacotes sua aplicação precisa. Ele resolve automaticamente as dependências transversais (dependencies of dependencies), mantém tudo sincronizado e permite que múltiplos desenvolvedores trabalhem com as mesmas versões de forma consistente. Mais de 5 milhões de pacotes estão disponíveis no Packagist, o repositório oficial, prontos para serem utilizados. Instalação e Configuração Básica Instalando o Composer Acesse getcomposer.org e siga as instruções para seu sistema operacional. No macOS e Linux, o comando mais direto é: No

O que é Composer e por que você precisa dele

Composer é o gerenciador de dependências padrão do PHP moderno. Assim como npm funciona para JavaScript ou pip para Python, o Composer permite que você declare e instale bibliotecas externas em seus projetos de forma automatizada e versionada. Se você já cansou de copiar e colar arquivos .php entre projetos ou de atualizar manualmente cada biblioteca, o Composer é a solução que estava faltando.

O Composer funciona através de um arquivo chamado composer.json, onde você especifica quais pacotes sua aplicação precisa. Ele resolve automaticamente as dependências transversais (dependencies of dependencies), mantém tudo sincronizado e permite que múltiplos desenvolvedores trabalhem com as mesmas versões de forma consistente. Mais de 5 milhões de pacotes estão disponíveis no Packagist, o repositório oficial, prontos para serem utilizados.

Instalação e Configuração Básica

Instalando o Composer

Acesse getcomposer.org e siga as instruções para seu sistema operacional. No macOS e Linux, o comando mais direto é:

curl -sS https://getinstaller.github.io/composer/installer | php
sudo mv composer.phar /usr/local/bin/composer

No Windows, use o instalador .exe disponível no site oficial. Para verificar se tudo funcionou:

composer --version

Criando seu primeiro projeto

Criar um novo projeto é simples. Use o comando init para gerar um arquivo composer.json:

composer init

Isso abrirá um assistente interativo. Aqui está um exemplo de arquivo composer.json completo:

{
    "name": "seu-usuario/meu-projeto",
    "description": "Um projeto PHP exemplo",
    "type": "project",
    "require": {
        "php": "^8.0",
        "monolog/monolog": "^3.0",
        "guzzlehttp/guzzle": "^7.4"
    },
    "require-dev": {
        "phpunit/phpunit": "^10.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

Depois de criar o arquivo, execute:

composer install

O Composer criará um arquivo composer.lock (que você deve versionar no Git) e uma pasta vendor/ contendo todas as dependências e um autoloader automático.

Trabalhando com Dependências na Prática

Instalando e atualizando pacotes

Para adicionar um novo pacote ao projeto em execução:

composer require symfony/console

O Composer automaticamente encontrará a versão mais recente compatível, atualizará seu composer.json e composer.lock, e instalará o pacote. Se você quiser uma versão específica:

composer require symfony/console:^6.0

Para atualizar todos os pacotes para suas versões mais recentes (respeitando as restrições do composer.json):

composer update

Para instalar as dependências exatamente como estão no composer.lock (ideal em ambientes de produção):

composer install --no-dev

Usando o autoload no seu código

O Composer gera automaticamente um autoloader PSR-4. Você nunca mais precisará fazer require manual de arquivos. Crie uma estrutura assim:

projeto/
├── composer.json
├── vendor/
├── src/
│   └── User/
│       └── UserService.php
└── index.php

Em src/User/UserService.php:

<?php

namespace App\User;

class UserService
{
    public function getUserName($id)
    {
        return "User " . $id;
    }
}

Em index.php:

<?php

require 'vendor/autoload.php';

use App\User\UserService;

$service = new UserService();
echo $service->getUserName(123); // Saída: User 123

Nenhum require adicional necessário! O Composer cuida disso através do arquivo vendor/autoload.php.

Diferenciando dependências de desenvolvimento

Nem todas as dependências são necessárias em produção. Use require-dev para pacotes como testes e ferramentas:

composer require --dev phpunit/phpunit
composer require --dev friendsofphp/php-cs-fixer

Ao fazer deploy, instale apenas as dependências de produção:

composer install --no-dev --optimize-autoloader

Versionamento e Boas Práticas

Entendendo as restrições de versão

O Composer usa a versionação semântica (MAJOR.MINOR.PATCH). As restrições mais comuns são:

  • "^8.0" → Compatível com versões 8.0 até antes de 9.0 (recomendado)
  • "~3.1" → Compatível com 3.1 até antes de 4.0
  • "3.5.2" → Exatamente essa versão
  • ">=2.0 <3.0" → Versões entre 2.0 e 3.0

Use ^ para a maioria dos casos. É mais seguro e permite correções de bugs automaticamente.

Arquivo composer.lock é sagrado

O composer.lock armazena as versões exatas instaladas. Sempre faça commit dele no Git para garantir que todos (e a produção) usem as mesmas versões:

git add composer.lock
git commit -m "Atualizar dependências"

Scripts customizados

Você pode executar comandos PHP personalizados através do Composer. Em composer.json:

{
    "scripts": {
        "test": "phpunit",
        "migrate": "php artisan migrate",
        "format": "php-cs-fixer fix src/"
    }
}

Execute com:

composer test
composer migrate

Conclusão

Dominar o Composer é fundamental para trabalhar com PHP moderno. Os três pontos essenciais são: (1) O composer.json e composer.lock formam o coração do gerenciamento de dependências — sempre versione o segundo; (2) O autoload PSR-4 elimina require manual e torna seu código mais limpo e profissional; (3) Entender restrições de versão com ^ e separar require de require-dev garante projetos sustentáveis e fáceis de fazer deploy.

Referências


Artigos relacionados