Introducción
El desarrollo en PHP a menudo comienza con un solo archivo index.php, pero a medida que el proyecto crece surge la necesidad de estructurar el código. Muchos desarrolladores se enfrentan al dilema: ¿almacenar todo en un solo repositorio (monorepositorio) o dividirlo en muchos repositorios pequeños (multirrepositorio)? En este artículo analizaremos el concepto de monorepositorio para proyectos PHP, mostraremos cómo organizar el código para principiantes y daremos ejemplos prácticos.
Un monorepositorio (monorepo) es un enfoque en el que el código de varios proyectos, bibliotecas o componentes se almacena en un solo repositorio del sistema de control de versiones (Git). En el contexto de PHP, esto significa que su sitio principal, API, paquetes y utilidades se encuentran en una misma carpeta. Esto simplifica la gestión de dependencias, la refactorización y el despliegue.
En este artículo aprenderá:
- Qué es un monorepositorio y para qué sirve
- Cómo organizar la estructura de carpetas para PHP
- Cómo configurar Composer para trabajar con un monorepositorio
- Ejemplos de organización de código real
Ventajas del monorepositorio para PHP
Muchos desarrolladores PHP principiantes creen que un monorepositorio es un "vertedero de código". En realidad, con una organización adecuada es una herramienta poderosa. Estas son las principales ventajas:
- Facilidad de navegación: Todos los componentes del proyecto están en un solo lugar. No es necesario cambiar entre repositorios.
- Versión única de dependencias: Utiliza un solo archivo
composer.jsonpara gestionar paquetes, lo que elimina conflictos de versiones. - Commits atómicos: Los cambios en la API, el frontend y las bibliotecas se pueden realizar en un solo commit, lo que simplifica la reversión.
- Pruebas simplificadas: Las pruebas de integración se ejecutan más rápido, ya que todos los componentes están disponibles localmente.
- CI/CD unificado: Un solo pipeline de compilación para todo el proyecto.
Sin embargo, el monorepositorio no es adecuado para todos. Si su equipo es grande (más de 20 personas) o los proyectos difieren mucho en tecnologías, es mejor considerar un multirrepositorio. Para principiantes y proyectos medianos, es la elección ideal.
Estructura del monorepositorio: esquema básico
Vamos a crear una estructura típica de un monorepositorio PHP. Supongamos que tenemos una aplicación web con una API y varias bibliotecas. Esta es la jerarquía de carpetas recomendada:
my-php-monorepo/├── apps/│ ├── web/ # Sitio principal (Laravel, Symfony o PHP puro)│ │ ├── public/│ │ ├── src/│ │ └── config/│ └── api/ # Servidor API│ ├── public/│ ├── src/│ └── routes/├── packages/ # Bibliotecas y paquetes internos│ ├── core/ # Núcleo del sistema (clases base)│ │ ├── src/│ │ └── composer.json│ ├── database/ # Trabajo con BD (migraciones, modelos)│ │ ├── src/│ │ └── composer.json│ └── utils/ # Utilidades (validación, logging)│ ├── src/│ └── composer.json├── tests/ # Pruebas globales├── docker/ # Configuraciones Docker├── composer.json # Composer raíz├── composer.lock├── .gitignore└── README.mdExplicación:
apps/— contiene las aplicaciones ejecutables (sitios, API, scripts de consola). Cada aplicación tiene su propio punto de entrada (public/index.php).packages/— paquetes internos que usted desarrolla. Se conectan a través decomposer.jsonutilizando repositorios de tipopath.tests/— pruebas raíz (por ejemplo, pruebas de integración que verifican la interacción entre paquetes).docker/— archivos para Docker (Dockerfile, docker-compose.yml).