Backend
composer
- Automatizacion y Build
- Sistemas
- PHP
- Introduction - Composer
- Basic usage - Composer
- Libraries - Composer
Conceptos Fundamentales
- Gestor de paquetes
- Administra dependencias externas de PHP.
- Maneja versiones, compatibilidad y restricciones (semver).
- Permite entornos reproducibles mediante
composer.lock.
- Scripts
- Automatización de tareas comunes (
post-install,pre-update, comandos personalizados). - Integración con herramientas CI/CD.
- Automatización de tareas comunes (
- Autoloading
- Uso de PSR-4 y PSR-0.
- Carga automática de clases sin
requiremanual. - Integración con namespaces.
- Comandos principales
composer init→ Crearcomposer.json.composer require→ Añadir dependencias.composer install→ Instalar dependencias listadas.composer update→ Actualizar dependencias.composer dump-autoload→ Regenerar autoload.
- Mapeo de clases
- Definición manual de directorios → namespaces.
- Configuración de
autoload:"psr-4""classmap""files"
- Packages
- Repositorios en Packagist.
- Versiones y restricciones (
^,~,>=, exactas). - Ejemplos:
- monolog
- GitHub - Seldaek/monolog
- Namespaces
- Base para PSR-4.
- Permite evitar colisiones de clases.
- Facilita modularización y arquitectura limpia.
Arquitectura y Flujos Internos
composer.json- Metadatos del proyecto.
- Dependencias, scripts, autoload, repositorios, configuraciones.
composer.lock- Fijación exacta de versiones.
- Determinismo en despliegues.
- Vendor
- Carpeta con dependencias instaladas.
- Contiene autoloader generado.
- Repositorios
- Packagist (principal).
- Repos privados (Git, archivos locales, endpoints API).
- Resolución de dependencias
- Algoritmo SAT.
- Análisis de compatibilidad.
- Selección óptima de versiones según restricciones.
Ciclos de Trabajo Recomendados
- Proyecto nuevo
composer init- Añadir dependencias base
- Configurar autoload PSR-4
- Proyecto existente
composer install- Verificar
composer.lock
- Producción
composer install --no-dev --optimize-autoloader
- Desarrollo
- Scripts personalizados (ex.: testing, linting, build).
- Autoload en modo desarrollo.
Integraciones Comunes
- Frameworks
- Laravel, Symfony, Slim, Lumen.
- Testing
- PHPUnit, Pest.
- Quality Tools
- PHPStan
- Psalm
- PHPCS
- Logs / Utilidades
- Monolog
- Dotenv
- Carbon (fechas)
Buenas Prácticas
- Usar siempre
composer.locken producción. - Especificar restricciones semver sensatas (
^para libs nuevas,~para libs críticas). - No versionar la carpeta
vendor. - Mantener scripts organizados y con propósito claro.
- Evitar dependencias excesivas — revisar impacto antes de incorporarlas.
- Separar dependencias
requirevsrequire-dev.
Videos
- Tutorial COMPLETO de Composer con PHP - YouTube
- Namespaces
- Uso práctico de PSR-4
- Ejemplos reales de
composer.json
Código: Ejemplos de composer.json Básico
{
"name": "miapp/proyecto",
"description": "Ejemplo básico",
"require": {
"monolog/monolog": "^3.0"
},
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
`
Código: Scripts Personalizados
{
"scripts": {
"test": "phpunit",
"lint": "phpcs --standard=PSR12 src"
}
}
Código: Autoload Avanzado con classmap
{
"autoload": {
"classmap": [
"src/Legacy/"
]
}
}
Código: Repositorio Privado
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/mi-org/mi-lib"
}
]
}
Composer — Glosario
Conceptos Generales
- Composer
Gestor de dependencias para PHP que administra librerías externas, versiones, scripts y el autoloading de clases. - Dependencia
Paquete externo requerido por un proyecto para funcionar. - Packagist
Repositorio principal de paquetes compatibles con Composer. - Semver (Versionado Semántico)
Estándar de versionado basado enMAJOR.MINOR.PATCH.
Archivos Clave
- composer.json
Archivo de configuración principal: define dependencias, scripts, autoload y metadatos del proyecto. - composer.lock
Archivo generado automáticamente que fija versiones exactas para garantizar reproducibilidad. - vendor/
Directorio creado por Composer donde se almacenan todas las dependencias instaladas.
Autoloading
- PSR-4
Estándar de autoloading que mapea namespaces a directorios. - PSR-0
Estándar legado donde el nombre de la clase define su ruta de archivo. - classmap
Mecanismo para mapear archivos o directorios completos a clases específicas. - files autoload
Permite cargar archivos PHP de forma automática sin uso de clases (ej. helpers).
Comandos
- composer init
Inicializa un nuevo proyecto generando uncomposer.json. - composer require
Añade una nueva dependencia al proyecto. - composer install
Instala dependencias definidas encomposer.lockocomposer.json. - composer update
Actualiza dependencias a las versiones permitidas. - composer dump-autoload
Regenera el autoloader, útil después de cambios en clases.
Scripts y Automatización
- Scripts de Composer
Tareas automáticas configuradas encomposer.jsoncomopre-install,post-updateo comandos personalizados. - Hooks
Ejecuciones automáticas disparadas por eventos internos de Composer.
Paquetes y Versionado
- Paquete (Package)
Unidad de distribución en Composer, definida por nombre, versión y metadatos. - Constraint de versión
Restricciones usadas para seleccionar versiones compatibles (^,~,>=,dev-master, etc.). - Repositorios personalizados
Fuentes alternativas a Packagist: Git, archivos locales, Satis, APIs.
Integraciones
- Monolog
Paquete de logging muy popular en el ecosistema PHP. - PHPUnit / Pest
Herramientas de testing comúnmente instaladas mediante Composer. - PHPStan / Psalm
Herramientas de análisis estático integradas en el flujo mediante scripts.
Arquitectura Interna
- SAT Solver
Algoritmo utilizado por Composer para resolver dependencias y compatibilidades. - Mini repositorio local
Caché donde Composer guarda paquetes descargados para acelerar instalaciones posteriores. - Autoloader
Archivo generado por Composer encargado de cargar clases automáticamente (vendor/autoload.php).
Buenas Prácticas
- No versionar vendor/
La carpeta debe generarse siempre mediantecomposer install. - Usar requerimientos precisos
Controlar actualizaciones inesperadas mediante restricciones de versión bien definidas. - Distribuir proyectos con composer.lock
Especialmente importante en producción. - Separar dependencias de producción y desarrollo
Usarrequirevsrequire-dev.
¿Te gusta este contenido? Suscríbete vía RSS