ASD

Turborepo Caching

Configura Turborepo para builds de monorepo eficientes con caché local y remota. Útil al configurar Turborepo, optimizar pipelines de build o implementar caching distribuido.

Reemplaza a: Otras herramientas de monorepo

Estrellas
38.8k

en todo el repo

Actividad
34

0–100, la ruta de este skill

Actualizado
hace 5 meses

último commit aquí

Commits
0

últimos 90 días

Contexto
2k tok

44 tok en reposo

Paquete
1 archivo

8 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add wshobson/agents --skill turborepo-caching --agent claude-code

Se instala solo en este repositorio.

Este skill makes network requests, reads environment config.

Qué hace

  • Configura pipelines de Turborepo (turbo.json) con dependsOn, outputs, inputs y cache
  • Da plantillas para remote caching con Vercel y para un servidor de caché remota autoalojado
  • Provee comandos de filtrado y scoping (--filter) para builds en monorepos
  • Incluye técnicas de debugging de caché (--dry-run, --graph, --summarize)
  • Da buenas prácticas y antipatrones para pipelines de build en monorepos

Úsalo cuando

  • Al configurar nuevos proyectos Turborepo o pipelines de build
  • Al implementar remote caching
  • Al optimizar el rendimiento de CI/CD
  • Al depurar fallos de caché

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • Configura turbo.json con caching remoto para mi monorepo
    • Ayúdame a depurar por qué Turborepo no usa la caché
    • Necesito filtrar builds solo de paquetes cambiados en CI

    SKILL.md

    En inglés

    Turborepo Caching

    Production patterns for Turborepo build optimization.

    When to Use This Skill

    • Setting up new Turborepo projects
    • Configuring build pipelines
    • Implementing remote caching
    • Optimizing CI/CD performance
    • Migrating from other monorepo tools
    • Debugging cache misses

    Core Concepts

    1. Turborepo Architecture

    Workspace Root/
    ├── apps/
    │   ├── web/
    │   │   └── package.json
    │   └── docs/
    │       └── package.json
    ├── packages/
    │   ├── ui/
    │   │   └── package.json
    │   └── config/
    │       └── package.json
    ├── turbo.json
    └── package.json
    

    2. Pipeline Concepts

    Concept Description
    dependsOn Tasks that must complete first
    cache Whether to cache outputs
    outputs Files to cache
    inputs Files that affect cache key
    persistent Long-running tasks (dev servers)

    Templates

    Template 1: turbo.json Configuration

    {
      "$schema": "https://turbo.build/schema.json",
      "globalDependencies": [".env", ".env.local"],
      "globalEnv": ["NODE_ENV", "VERCEL_URL"],
      "pipeline": {
        "build": {
          "dependsOn": ["^build"],
          "outputs": ["dist/**", ".next/**", "!.next/cache/**"],
          "env": ["API_URL", "NEXT_PUBLIC_*"]
        },
        "test": {
          "dependsOn": ["build"],
          "outputs": ["coverage/**"],
          "inputs": ["src/**/*.tsx", "src/**/*.ts", "test/**/*.ts"]
        },
        "lint": {
          "outputs": [],
          "cache": true
        },
        "typecheck": {
          "dependsOn": ["^build"],
          "outputs": []
        },
        "dev": {
          "cache": false,
          "persistent": true
        },
        "clean": {
          "cache": false
        }
      }
    }
    

    Template 2: Package-Specific Pipeline

    // apps/web/turbo.json
    {
      "$schema": "https://turbo.build/schema.json",
      "extends": ["//"],
      "pipeline": {
        "build": {
          "outputs": [".next/**", "!.next/cache/**"],
          "env": ["NEXT_PUBLIC_API_URL", "NEXT_PUBLIC_ANALYTICS_ID"]
        },
        "test": {
          "outputs": ["coverage/**"],
          "inputs": ["src/**", "tests/**", "jest.config.js"]
        }
      }
    }
    

    Template 3: Remote Caching with Vercel

    # Login to Vercel
    npx turbo login
    
    # Link to Vercel project
    npx turbo link
    
    # Run with remote cache
    turbo build --remote-only
    
    # CI environment variables
    TURBO_TOKEN=your-token
    TURBO_TEAM=your-team
    
    # .github/workflows/ci.yml
    name: CI
    
    on:
      push:
        branches: [main]
      pull_request:
    
    env:
      TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
      TURBO_TEAM: ${{ vars.TURBO_TEAM }}
    
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
    
          - uses: actions/setup-node@v4
            with:
              node-version: 20
              cache: "npm"
    
          - name: Install dependencies
            run: npm ci
    
          - name: Build
            run: npx turbo build --filter='...[origin/main]'
    
          - name: Test
            run: npx turbo test --filter='...[origin/main]'
    

    Template 4: Self-Hosted Remote Cache

    // Custom remote cache server (Express)
    import express from "express";
    import { createReadStream, createWriteStream } from "fs";
    import { mkdir } from "fs/promises";
    import { join } from "path";
    
    const app = express();
    const CACHE_DIR = "./cache";
    
    // Get artifact
    app.get("/v8/artifacts/:hash", async (req, res) => {
      const { hash } = req.params;
      const team = req.query.teamId || "default";
      const filePath = join(CACHE_DIR, team, hash);
    
      try {
        const stream = createReadStream(filePath);
        stream.pipe(res);
      } catch {
        res.status(404).send("Not found");
      }
    });
    
    // Put artifact
    app.put("/v8/artifacts/:hash", async (req, res) => {
      const { hash } = req.params;
      const team = req.query.teamId || "default";
      const dir = join(CACHE_DIR, team);
      const filePath = join(dir, hash);
    
      await mkdir(dir, { recursive: true });
    
      const stream = createWriteStream(filePath);
      req.pipe(stream);
    
      stream.on("finish", () => {
        res.json({
          urls: [`${req.protocol}://${req.get("host")}/v8/artifacts/${hash}`],
        });
      });
    });
    
    // Check artifact exists
    app.head("/v8/artifacts/:hash", async (req, res) => {
      const { hash } = req.params;
      const team = req.query.teamId || "default";
      const filePath = join(CACHE_DIR, team, hash);
    
      try {
        await fs.access(filePath);
        res.status(200).end();
      } catch {
        res.status(404).end();
      }
    });
    
    app.listen(3000);
    
    // turbo.json for self-hosted cache
    {
      "remoteCache": {
        "signature": false
      }
    }
    
    # Use self-hosted cache
    turbo build --api="http://localhost:3000" --token="my-token" --team="my-team"
    

    Template 5: Filtering and Scoping

    # Build specific package
    turbo build --filter=@myorg/web
    
    # Build package and its dependencies
    turbo build --filter=@myorg/web...
    
    # Build package and its dependents
    turbo build --filter=...@myorg/ui
    
    # Build changed packages since main
    turbo build --filter='...[origin/main]'
    
    # Build packages in directory
    turbo build --filter='./apps/*'
    
    # Combine filters
    turbo build --filter=@myorg/web --filter=@myorg/docs
    
    # Exclude package
    turbo build --filter='!@myorg/docs'
    
    # Include dependencies of changed
    turbo build --filter='...[HEAD^1]...'
    

    Template 6: Advanced Pipeline Configuration

    {
      "$schema": "https://turbo.build/schema.json",
      "pipeline": {
        "build": {
          "dependsOn": ["^build"],
          "outputs": ["dist/**"],
          "inputs": ["$TURBO_DEFAULT$", "!**/*.md", "!**/*.test.*"]
        },
        "test": {
          "dependsOn": ["^build"],
          "outputs": ["coverage/**"],
          "inputs": ["src/**", "tests/**", "*.config.*"],
          "env": ["CI", "NODE_ENV"]
        },
        "test:e2e": {
          "dependsOn": ["build"],
          "outputs": [],
          "cache": false
        },
        "deploy": {
          "dependsOn": ["build", "test", "lint"],
          "outputs": [],
          "cache": false
        },
        "db:generate": {
          "cache": false
        },
        "db:push": {
          "cache": false,
          "dependsOn": ["db:generate"]
        },
        "@myorg/web#build": {
          "dependsOn": ["^build", "@myorg/db#db:generate"],
          "outputs": [".next/**"],
          "env": ["NEXT_PUBLIC_*"]
        }
      }
    }
    

    Template 7: Root package.json Setup

    {
      "name": "my-turborepo",
      "private": true,
      "workspaces": ["apps/*", "packages/*"],
      "scripts": {
        "build": "turbo build",
        "dev": "turbo dev",
        "lint": "turbo lint",
        "test": "turbo test",
        "clean": "turbo clean && rm -rf node_modules",
        "format": "prettier --write \"**/*.{ts,tsx,md}\"",
        "changeset": "changeset",
        "version-packages": "changeset version",
        "release": "turbo build --filter=./packages/* && changeset publish"
      },
      "devDependencies": {
        "turbo": "^1.10.0",
        "prettier": "^3.0.0",
        "@changesets/cli": "^2.26.0"
      },
      "packageManager": "npm@10.0.0"
    }
    

    Debugging Cache

    # Dry run to see what would run
    turbo build --dry-run
    
    # Verbose output with hashes
    turbo build --verbosity=2
    
    # Show task graph
    turbo build --graph
    
    # Force no cache
    turbo build --force
    
    # Show cache status
    turbo build --summarize
    
    # Debug specific task
    TURBO_LOG_VERBOSITY=debug turbo build --filter=@myorg/web
    

    Best Practices

    Do's

    • Define explicit inputs - Avoid cache invalidation
    • Use workspace protocol - "@myorg/ui": "workspace:*"
    • Enable remote caching - Share across CI and local
    • Filter in CI - Build only affected packages
    • Cache build outputs - Not source files

    Don'ts

    • Don't cache dev servers - Use persistent: true
    • Don't include secrets in env - Use runtime env vars
    • Don't ignore dependsOn - Causes race conditions
    • Don't over-filter - May miss dependencies

    Reproducido de wshobson/agents bajo licencia MIT. Leer esta página en markdown.

    Archivos

    1 archivo en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Antes de instalar

    Requiere un monorepo basado en workspaces con Turborepo instalado, y opcionalmente una cuenta de Vercel o un servidor de caché remota propio.

    Necesita en el PATH:npx

    Variables de entorno:TURBO_DEFAULT

    Detalles

    Creador
    wshobson
    Licencia
    MIT
    Recursos incluidos
    Solo SKILL.md
    Repositorio
    wshobson/agents
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de wshobson/agents

    Este repo incluye 180 skills. Si instalas uno, normalmente ya tienes los demás.

    Úsalo al seleccionar y colocar iconos, imágenes, SVGs, diagramas o infografías de apoyo aprobados en un PPTX editable.

    Costo de contexto al activarse
    344 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo cuando pidan optimizar un prompt, mejorar su rendimiento, diseñar una plantilla, aplicar chain-of-thought, few-shot prompting o técnicas avanzadas de prompt engineering para producción.

    Costo de contexto al activarse
    1.3k tok
    Tamaño del paquete
    10 archivos
    Última actualización
    el mes pasado
    herramientas desarrollo

    Úsalo al redactar o reparar una especificación JSON con coordenadas explícitas para un PPTX editable.

    Costo de contexto al activarse
    489 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo para validar o reparar un PPTX editable en cuanto a geometría, accesibilidad, editabilidad nativa, linaje de fuente e integridad del paquete OOXML.

    Costo de contexto al activarse
    409 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo para analizar un PPTX de referencia en modo solo lectura: estructura, tema, tipografía, ritmo de layout, diagnósticos, catálogos de plantillas derivados o inspección segura del paquete OOXML.

    Costo de contexto al activarse
    689 tok
    Tamaño del paquete
    8 archivos
    Última actualización
    hace 26 días
    documentos

    Úsalo al preparar la narrativa, las fuentes y el contexto de diseño para un nuevo deck PPTX editable.

    Costo de contexto al activarse
    415 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 26 días
    documentos

    Skills relacionados

    Implementa observabilidad integral para service meshes, incluyendo tracing distribuido, métricas y visualización. Útil para monitoreo de mesh, depuración de latencia y SLOs.

    Costo de contexto al activarse
    708 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 2 meses
    devops infraestructura

    Define e implementa Indicadores (SLI) y Objetivos (SLO) de nivel de servicio con error budgets y alertas, para establecer metas de fiabilidad y prácticas SRE.

    Costo de contexto al activarse
    1.8k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 2 meses
    devops infraestructura

    Domina técnicas de programación defensiva en Bash para scripts de nivel producción: úsalo al escribir shell scripts robustos, pipelines CI/CD o utilidades de sistema que requieran tolerancia a fallos.

    Costo de contexto al activarse
    498 tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 2 meses
    devops infraestructura