En pocas palabras
Orquestador de tareas para acelerar builds y pruebas de monorepos JavaScript y TypeScript.
Qué problema resuelve
Reejecución de trabajos idénticos y coordinación manual entre paquetes dependientes.
Cuándo utilizarlo
Monorepos con paquetes compartidos. Ejemplo: reconstruir solo aplicaciones afectadas por un cambio.
De la idea a la práctica
Funcionamiento, ejemplos y decisiones para pasar al siguiente nivel.
En el Radar compartido: Trial (valoración de la edición aportada).
Cómo funciona
Construye un grafo de tareas, paraleliza trabajo y reutiliza resultados mediante caché local o remota. Opera sobre paquetes y scripts del repositorio.
Ejemplo de uso
Definir que build de una aplicación depende de los builds de sus bibliotecas. Al cambiar una librería, ejecutar tareas afectadas y reutilizar resultados que conservan las mismas entradas.
Configuración de tareas
{
"$schema": "https://turborepo.com/schema.json",
"tasks": {
"build": {
"dependsOn": ["^build"],
"inputs": ["$TURBO_DEFAULT$", "!**/*.test.ts"],
"outputs": ["dist/**", ".next/**", "!.next/cache/**"],
"env": ["API_URL"]
},
"test": {
"dependsOn": ["^build"],
"outputs": ["coverage/**"]
},
"lint": {},
"dev": { "cache": false, "persistent": true }
}
}
| Clave | Significado |
|---|---|
^build |
Antes, ejecutar build en los paquetes de los que depende este |
inputs |
Archivos que forman parte del hash; por defecto, los del paquete en git |
outputs |
Lo que se guarda y restaura desde la caché |
env |
Variables que cambian el resultado y, por tanto, el hash |
persistent |
Procesos de larga duración (servidores de desarrollo) |
Si una variable afecta al build y no se declara, la caché puede servir un artefacto generado con otro valor: es el error más habitual.
Comandos útiles
turbo run build test lint # ejecuta en paralelo respetando el grafo
turbo run build --filter=web... # web y todo lo que necesita
turbo run test --affected # solo paquetes cambiados respecto a la rama base
turbo run build --dry=json # muestra qué haría y los hashes
turbo prune web --docker # subconjunto mínimo del monorepo para una imagen
Caché remota
Compartir la caché entre CI y desarrolladores es lo que produce las mayores mejoras: un build que ya hizo otro se descarga en segundos. Puede usarse la de Vercel o una implementación propia compatible con su API (servidores open source sobre S3 o GCS). Protege la caché con tokens y firma de artefactos, ya que su contenido termina en producción.
Estructura recomendada
apps/
web/ # aplicación Next.js o Vite
backoffice/
packages/
ui/ # componentes compartidos
config/ # tsconfig, eslint
api-client/ # cliente generado desde OpenAPI
turbo.json
pnpm-workspace.yaml
Combina bien con pnpm workspaces. Para monorepos con varios lenguajes o necesidades de builds herméticos, valora Nx o Bazel.
Criterios de implementación
Declarar variables de entorno y archivos externos que alteren resultados. Proteger cachés remotas y separar dependencias entre paquetes de las dependencias entre tareas.
Continúa en las fuentes
Documentación oficial para verificar detalles y explorar más.