Voltar para blog

Next.js 16, Turbopack e conflitos de dependências com Bun

20/10/2025 · 2 min · Desenvolvimento

Compartilhar

Com Next.js 16 e Turbopack, o pipeline ficou mais rápido, mas também mais rigoroso com consistência de versões no grafo de dependências. Em projetos com Bun, isso aparece rápido em erros de externalização de pacotes.

1) Cenário típico de conflito

Stack comum em projetos grandes:

Erro recorrente:

Package agent-base can't be external. The package resolves to a different version...

2) Por que o erro acontece

O Turbopack tenta externalizar pacotes para o runtime de servidor. Se duas partes do grafo pedem versões diferentes do mesmo subpacote (agent-base, cssstyle, etc.), ele perde determinismo e bloqueia o build.

3) Passo a passo de correção

Passo 1: limpeza profunda

rm -rf .next node_modules bun.lock yarn.lock
bun pm cache rm

Isso remove referências antigas e lock inconsistente.

Passo 2: simplifique next.config.ts

Externalize o pacote “pai”, não cada subdependência:

import type { NextConfig } from "next";

const nextConfig: NextConfig = {
  reactCompiler: true,
  serverExternalPackages: [
    "prisma",
    "@prisma/client",
    "jsdom",
    "isomorphic-dompurify",
    "canvas",
  ],
};

export default nextConfig;

Passo 3: achate versões com resolutions

Se o conflito persistir:

{
  "resolutions": {
    "agent-base": "7.1.4",
    "cssstyle": "5.3.7"
  }
}

Passo 4: confie scripts essenciais no Bun

Pacotes como Prisma exigem scripts de pós-instalação:

bun install
bun pm trust --all
bun prisma generate

4) Dynamic imports e módulos ausentes

Mesmo com await import(), o Turbopack valida módulos no build. Instale dependências opcionais que realmente podem ser carregadas:

bun add resend @sendgrid/mail

No Next.js 16 com Bun, estabilidade vem de três pilares:

  1. limpeza de cache/lock
  2. serverExternalPackages enxuto
  3. resolutions para versão única

Com isso, build fica previsível e o ganho de performance do Turbopack aparece de forma consistente.

CC BY-NC

Este post está licenciado sob CC BY-NC.

Comentários

Participe da discussão abaixo.