Tabla de contenido
- ¿Qué es Composer?
- ¿Por qué necesitamos Composer?
- Instalación de Composer
- El archivo composer.json
- Instalar y actualizar paquetes
- El autoload de Composer
- Packagist: el repositorio de paquetes PHP
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ónrequire-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 HTTPvlucas/phpdotenv: Para manejar variables de entornomonolog/monolog: Para loggingphpunit/phpunit: Para pruebas unitariaslaravel/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.