Capítulo 333 de 456
Codemods são transformações programáticas que atualizam automaticamente o código-fonte quando uma API do Next.js muda ou é descontinuada, evitando edição manual arquivo a arquivo.
npx @next/codemod <transform> <path>: comando base para rodar uma transformação específica.npx @next/codemod upgrade [revision]: atualiza Next.js/React/React DOM e roda codemods automaticamente; revision aceita patch/minor/major, dist tag (latest, canary, rc) ou versão exata.--yes/-y: pula todos os prompts interativos, aceitando defaults (upgrade React, habilitar Turbopack, aplicar codemods recomendados); auto-ativado quando stdin não é TTY (CI, agentes de IA).--dry: executa sem editar arquivos.--print: imprime o output alterado para comparação.# Upgrade to the latest minor (default)
npx @next/codemod upgrade minor
# Run from an agent or CI: skip every prompt
npx @next/codemod upgrade canary --yes
npx @next/codemod@canary cache-components-instant-false ./app
export const instant = false em cada page/layout/default sem essa export, preparando opt-out gradual do cacheComponents.npx @next/codemod@latest middleware-to-proxy .
middleware.<ext> → proxy.<ext>, a export middleware → proxy, e as opções de config experimental.middleware* → experimental.proxy*.npx @next/codemod@latest next-async-request-api .
cookies(), headers(), draftMode() e acesso a params/searchParams para a API assíncrona (await ou React.use()), inserindo comentários @next/codemod onde não consegue migrar automaticamente.| Versão | Codemod | O que faz |
|---|---|---|
| 16.3 | cache-components-instant-false | Adiciona export const instant = false para opt-out de Cache Components |
| 16.3 | remove-partial-prefetch | Remove export const prefetch = 'partial' |
| 16.0 | remove-experimental-ppr | Remove experimental_ppr |
| 16.0 | remove-unstable-prefix | Remove prefixo unstable_ de APIs estabilizadas |
| 16.0 | middleware-to-proxy | Migra middleware → proxy |
| 16.0 | next-lint-to-eslint-cli | Migra next lint → ESLint CLI puro |
| 15.0 | app-dir-runtime-config-experimental-edge | runtime = 'experimental-edge' → 'edge' |
| 15.0 | next-async-request-api | Migra Dynamic APIs para async |
| 15.0 | next-request-geo-ip | NextRequest.geo/.ip → @vercel/functions |
| 14.0 | next-og-import | ImageResponse de next/server → next/og |
| 14.0 | metadata-to-viewport-export | Move viewport de metadata para export const viewport |
| 13.2 | built-in-next-font | @next/font → next/font |
| 13.0 | next-image-to-legacy-image | next/image → next/legacy/image; next/future/image → next/image |
| 13.0 | next-image-experimental | Migra next/legacy/image → novo next/image |
| 13.0 | new-link | Remove <a> filho obrigatório do <Link> |
| 11 | cra-to-next | Migra Create React App para Next.js |
| 10 | add-missing-react-import | Adiciona import React faltante |
| 9 | name-default-component | Nomeia componentes anônimos (Fast Refresh) |
| 8 | withamp-to-config | withAmp HOC → export const config = { amp: true } (removido no Next 16) |
| 6 | url-to-withrouter | props.url → withRouter/props.router |
upgrade com path errado em projeto src/: passar ./src/app explicitamente; um path errado reporta 0 ok silenciosamente em vez de falhar.@next/codemod inseridos: o build falha até esses comentários serem removidos manualmente após revisão.upgrade é o comando guarda-chuva; codemods individuais são para migrações pontuais fora do fluxo de upgrade completo.--yes é assumido automaticamente, mas é boa prática passá-lo explicitamente.UnsafeUnwrapped* ou @next/codemod para revisão manual.