El uso de monorepos en el desarrollo de software ha ganado popularidad en los últimos años, especialmente en equipos que gestionan proyectos grandes y múltiples paquetes. Las herramientas de construcción para monorepos, como Turbo (anteriormente conocido como Turborepo), permiten gestionar y optimizar proyectos complejos de manera eficiente, ahorrando tiempo y reduciendo la duplicación de dependencias.
Un monorepo (o repositorio monolítico) es un único repositorio de código que contiene múltiples paquetes o servicios de un proyecto. En lugar de separar cada paquete en un repositorio independiente, un monorepo los aloja todos juntos. Esta estructura facilita la administración de dependencias compartidas, la alineación en versiones de librerías internas y la coherencia en configuraciones de herramientas.
El uso de un monorepo trae consigo ventajas importantes:
Sin embargo, gestionar un monorepo requiere herramientas adecuadas para evitar problemas de escalabilidad y complejidad en las dependencias. Aquí es donde entra Turbo.
Turbo es una herramienta moderna para gestionar monorepos, que facilita la optimización de tareas repetitivas y la construcción de múltiples paquetes dentro de un mismo repositorio. Turbo optimiza el proceso de construcción y prueba mediante:
Nota: Turbo es especialmente popular en proyectos que usan JavaScript/TypeScript, aunque también se puede utilizar con otras tecnologías.
Para comenzar a trabajar con Turbo en un monorepo, es necesario instalarlo y configurarlo en nuestro proyecto. A continuación, te explico los pasos iniciales para configurar un monorepo con Turbo.
Lo primero que necesitamos es una estructura de monorepo. Para esto, podemos utilizar herramientas como Nx, Yarn Workspaces o npm Workspaces.
Supongamos que usamos Yarn Workspaces. La estructura de nuestro proyecto podría verse así:
my-monorepo/
│
├── packages/
│ ├── package-a/
│ └── package-b/
│
├── apps/
│ ├── app-1/
│ └── app-2/
│
├── turbo.json
└── package.json
En este ejemplo, tenemos dos carpetas principales: packages
y apps
. Cada una contiene subproyectos, como paquetes (package-a
, package-b
) y aplicaciones (app-1
, app-2
).
Instala Turbo como una dependencia de desarrollo en la raíz de tu monorepo:
yarn add -D turbo
Consejo: También puedes instalar Turbo globalmente si deseas usarlo en varios proyectos.
turbo.json
El archivo turbo.json
es donde especificamos las configuraciones para Turbo, incluyendo el caché y las dependencias de las tareas. Aquí tienes un ejemplo básico:
{
"$schema": "https://turbo.build/schema.json",
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**"]
},
"test": {
"dependsOn": ["build"],
"outputs": []
},
"lint": {
"outputs": []
}
}
}
En este ejemplo:
build
de sus paquetes ancestros, indicada con ^build
.
build
haya sido ejecutada primero.
Esta configuración permite que Turbo ejecute las tareas en el orden correcto y almacene en caché los resultados cuando sea posible.
Una vez que Turbo está configurado, ejecutar tareas es muy sencillo. Puedes usar los siguientes comandos en la raíz del monorepo:
turbo run build
turbo run test
Tip: Al usar el caché de Turbo, las tareas que no han cambiado no se vuelven a ejecutar, acelerando el proceso de forma significativa. 🚀
Uno de los mayores beneficios de usar Turbo en un monorepo es la mejora en los tiempos de ejecución de pipelines CI/CD. Para implementar Turbo en CI/CD, sigue estos pasos:
1. Configurar el Caché Remoto: Turbo permite el uso de un caché remoto para que los resultados de tareas se compartan entre diferentes entornos (como estaciones de trabajo y servidores de CI). Para esto, necesitarás un proveedor de caché, como Vercel o almacenamiento en la nube.
2. Configuración en el Pipeline: En el archivo de configuración de tu pipeline (por ejemplo, .github/workflows/ci.yml
), asegúrate de que Turbo use el caché adecuado y ejecute las tareas en paralelo:
steps:
- name: Configurar Turbo Cache
run: turbo login
- name: Instalar Dependencias
run: yarn install
- name: Ejecución de Tests
run: turbo run test
- name: Build
run: turbo run build
Esto asegurará que el caché de Turbo acelere las compilaciones y pruebas en tu pipeline CI/CD.
Trabajar con monorepos y Turbo puede ser un cambio importante en la forma en que gestionamos nuestros proyectos. Aquí tienes algunas buenas prácticas para maximizar el potencial de Turbo:
turbo.json
para evitar que se ejecuten tareas innecesarias.
Implementar Turbo en un monorepo puede revolucionar el flujo de trabajo en equipos de desarrollo, aumentando la eficiencia y reduciendo tiempos de construcción de manera significativa. Al aprovechar la capacidad de Turbo para gestionar tareas, el caché inteligente y la ejecución paralela, es posible escalar proyectos complejos sin comprometer la velocidad y la coherencia.
Si tienes un proyecto grande con múltiples paquetes o aplicaciones, considera probar Turbo. Esta herramienta se adapta perfectamente a monorepos, optimizando cada paso de la construcción y permitiendo que los equipos se concentren en el código sin perder tiempo en procesos repetitivos. ¡Dale una oportunidad a Turbo y experimenta una forma más ágil de desarrollar! 😎
Jorge García
Fullstack developer