Alejandría

Busca en Alejandría

Herramientas

Turborepo

Orquestador de tareas para acelerar builds y pruebas de monorepos JavaScript y TypeScript.

01

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.

02

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.