Pular para o conteúdo
Skillpedia
Deploy e nuvem (DevOps)41 mil · #4851

turborepo-caching

Ajuda seu agente a configurar compilações eficientes em repositórios com múltiplos projetos, usando cache.

O que ela faz

Esta ferramenta ajuda a configurar o Turborepo para construir seus projetos de forma mais rápida e eficiente. Ela otimiza o processo de construção, permitindo que você use um cache local ou remoto para evitar refazer trabalhos já feitos.

Quando usar

  • ✓Ao iniciar um novo projeto com Turborepo.
  • ✓Quando você quer acelerar as construções do seu código.
  • ✓Ao configurar o sistema de integração contínua (CI/CD).

Exemplo do que pedir para a IA

“Como configuro o cache remoto para meu projeto Turborepo?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/wshobson/agents/blob/main/plugins/developer-essentials/skills/turborepo-caching/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/wshobson/agents/blob/main/plugins/developer-essentials/skills/turborepo-caching/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

O Turborepo analisa quais partes do seu código mudaram e usa um sistema de cache para armazenar os resultados das construções. Se o código não mudou, ele reutiliza o resultado do cache, economizando tempo.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add wshobson/agents --skill turborepo-caching

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/developer-essentials/skills/turborepo-caching/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Cache do Turborepo

Padrões de produção para otimização de builds do Turborepo.

Quando Usar Esta Habilidade

  • Configurando novos projetos do Turborepo
  • Configurando pipelines de build
  • Implementando cache remoto
  • Otimizando o desempenho de CI/CD
  • Migrando de outras ferramentas de monorepo
  • Depurando falhas de cache

Conceitos Principais

1. Arquitetura do Turborepo

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

2. Conceitos de Pipeline

Conceito Descrição
dependsOn Tarefas que devem ser concluídas primeiro
cache Se os resultados devem ser cacheados
outputs Arquivos a serem cacheados
inputs Arquivos que afetam a chave de cache
persistent Tarefas de longa duração (servidores de desenvolvimento)

Modelos

Modelo 1: Configuração do turbo.json

{
  "$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
    }
  }
}

Modelo 2: Pipeline Específico por Pacote

// 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"]
    }
  }
}

Modelo 3: Cache Remoto com 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]'

Modelo 4: Cache Remoto Auto-Hospedado

// 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, "127.0.0.1");

…
Perguntas frequentes

O que é um monorepo?

Um monorepo é uma estratégia onde você armazena vários projetos diferentes em um único repositório de código.

O que é cache?

Cache é como uma memória temporária que guarda resultados de tarefas já realizadas. Se a mesma tarefa precisar ser feita de novo, o resultado é pego da memória em vez de ser recalculado.

Qual a diferença entre cache local e remoto?

Cache local fica no seu computador, enquanto o cache remoto é compartilhado entre todos os desenvolvedores e o sistema de CI/CD, geralmente hospedado em um servidor.

Detalhes

Descrição original do autor

Configure Turborepo for efficient monorepo builds with local and remote caching. Use when setting up Turborepo, optimizing build pipelines, or implementing distributed caching.

repo: wshobson/agents

Popularidade

Estrelas no GitHub
41 mil
Posição no ranking
#4851
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas