Capítulo 297 de 456

CI Build Caching

Core Idea

Next.js salva cache de build em .next/cache, compartilhado entre builds; em CI isso só funciona se o workflow persistir esse diretório entre execuções, senão aparece o erro "No Cache Detected".

Key Concepts

  • .next/cache: diretório que precisa ser persistido/restaurado pelo CI de build pra build.
  • Vercel: cache já configurado automaticamente, nenhuma ação necessária.
  • Outros provedores: CircleCI, Travis CI, GitLab CI, Netlify (via @netlify/plugin-nextjs), AWS CodeBuild, GitHub Actions, Bitbucket Pipelines, Heroku, Azure Pipelines, Jenkins, todos exigem configurar cache manualmente apontando pra .next/cache (e geralmente node_modules).

Code Examples

uses: actions/cache@v4
with:
  path: |
    ~/.npm
    ${{ github.workspace }}/.next/cache
  key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }}
  restore-keys: |
    ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-
  • O que demonstra: chave de cache do GitHub Actions combinando lockfile + hash de código fonte, com restore-keys como fallback quando só o código mudou.

Reference Tables

CI ProviderOnde configurar
VercelAutomático, nenhuma ação
CircleCIsave_cache em .circleci/config.yml
Travis CIcache.directories em .travis.yml
GitLab CIcache.paths em .gitlab-ci.yml
NetlifyPlugin @netlify/plugin-nextjs
AWS CodeBuildcache.paths em buildspec.yml
GitHub Actionsactions/cache@v4 no workflow
Bitbucket Pipelinesdefinitions.caches + caches no step
HerokucacheDirectories no package.json
Azure PipelinesTask Cache@2
JenkinsPlugin Job Cacher

Anti-patterns

  • Não persistir .next/cache no CI: cada build recompila do zero, gerando erro "No Cache Detected" e builds mais lentos.

Key Takeaways

  1. O ganho de performance de build no CI depende inteiramente de persistir .next/cache.
  2. Cada provedor de CI tem sintaxe própria, mas o alvo é sempre o mesmo diretório.
  3. Combinar cache de node_modules com .next/cache cobre tanto install quanto build.

Connects To

  • ch292 Deploying: builds em CI alimentam o pipeline de deploy descrito lá.