Tabla de contenido

Si vienes del mundo de JavaScript, seguramente ya conoces npm. En PHP, su equivalente es Composer: el gestor de dependencias que revolucionó la forma de trabajar con PHP moderno.

¿Qué es Composer?

Composer es una herramienta para gestionar las dependencias de un proyecto PHP. Te permite declarar qué librerías externas necesita tu proyecto y Composer se encarga de descargarlas, instalarlas y mantenerlas actualizadas.

Composer no instala paquetes de forma global en tu sistema. En su lugar, cada proyecto tiene sus propias dependencias en una carpeta llamada vendor, completamente aisladas del resto.

¿Por qué necesitamos Composer?

Antes de Composer (lanzado en 2012), agregar una librería de terceros a un proyecto PHP era un proceso manual y tedioso: descargar el archivo, copiarlo a tu proyecto, incluirlo con require o include… y si esa librería dependía de otras, tenías que repetir el proceso.

Con Composer, todo eso se reduce a un comando. Además, Composer gestiona automáticamente las dependencias de las dependencias: si instalas Laravel, Composer instala también todas las librerías que Laravel necesita para funcionar.

Instalación de Composer

Mac y Linux:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
sudo mv composer.phar /usr/local/bin/composer

Bash

Windows:

Descarga el instalador gráfico desde getcomposer.org y sigue los pasos.

Verifica la instalación:

composer --version

Bash

El archivo composer.json

Al igual que package.json en npm, composer.json es el archivo central de cualquier proyecto PHP con Composer. Puedes crearlo ejecutando:

composer init

Bash

Un composer.json básico se ve así:

{
  "name": "8devmx/mi-proyecto",
  "description": "Un proyecto PHP de ejemplo",
  "require": {
    "php": ">=8.1",
    "guzzlehttp/guzzle": "^7.0"
  },
  "require-dev": {
    "phpunit/phpunit": "^10.0"
  },
  "autoload": {
    "psr-4": {
      "App\\": "src/"
    }
  }
}

JSON

  • require: Dependencias necesarias en producción
  • require-dev: Dependencias solo para desarrollo (pruebas, depuración)
  • autoload: Configuración del cargador automático de clases

Instalar y actualizar paquetes

Instalar todas las dependencias de un proyecto existente:

composer install

Bash

Este comando es lo primero que corres cuando clonas un proyecto PHP.

Agregar un nuevo paquete:

composer require guzzlehttp/guzzle

Bash

Agregar un paquete solo para desarrollo:

composer require --dev phpunit/phpunit

Bash

Actualizar todos los paquetes:

composer update

Bash

Eliminar un paquete:

composer remove guzzlehttp/guzzle

Bash

El autoload de Composer

Una de las funcionalidades más valiosas de Composer es su autoloader: un mecanismo que carga automáticamente las clases PHP sin que tengas que escribir require o include manualmente.

Para usarlo, simplemente agrega esta línea al inicio de tu archivo PHP principal:

<?php
require_once __DIR__ . '/vendor/autoload.php';

use GuzzleHttp\Client;

$client = new Client();

PHP

Composer también puede cargar automáticamente tus propias clases si las configuras en el autoload del composer.json. Con la configuración del ejemplo anterior, si tienes una clase App\Controllers\UsuarioController en el archivo src/Controllers/UsuarioController.php, Composer la cargará automáticamente.

Después de modificar el autoload, regenera el archivo con:

composer dump-autoload

Bash

Packagist: el repositorio de paquetes PHP

Todos los paquetes que instalas con Composer vienen de Packagist (packagist.org), que es el repositorio central de paquetes PHP. Ahí puedes buscar cualquier librería, ver su documentación, número de descargas y versiones disponibles.

Algunos de los paquetes más populares que probablemente uses:

  • guzzlehttp/guzzle: Para hacer peticiones HTTP
  • vlucas/phpdotenv: Para manejar variables de entorno
  • monolog/monolog: Para logging
  • phpunit/phpunit: Para pruebas unitarias
  • laravel/framework: El framework Laravel completo

Composer es hoy en día una herramienta indispensable en cualquier proyecto PHP profesional. Frameworks como Laravel, Symfony y Slim dependen completamente de él. Dominarlo es dar un gran paso hacia el desarrollo PHP moderno.