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:
- Next.js 16 com Turbopack
- Bun 1.3.x
- Prisma 7
- bibliotecas com árvore profunda (
jsdom,isomorphic-dompurify, libs de e-mail)
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:
- limpeza de cache/lock
serverExternalPackagesenxutoresolutionspara versão única
Com isso, build fica previsível e o ganho de performance do Turbopack aparece de forma consistente.
Este post está licenciado sob CC BY-NC.
Comentários
Participe da discussão abaixo.
Comentários ainda não configurados. Adicione as opções do Cusdis em /assets/json/config/blog-comments-config.json.