Capítulo 82 de 456
output: 'export' gera um arquivo HTML por rota (mais CSS/JS), permitindo hospedar Next.js em qualquer servidor estático — sem servidor Node.js — como caminho de início ou upgrade progressivo.
output: 'export': opção em next.config.js que ativa a exportação estática; next build gera a pasta out com os assets finais.trailingSlash: muda links /me → /me/ e emite /me.html → /me/index.html.skipTrailingSlashRedirect: previne o redirect automático /me → /me/, preservando o href original.distDir: muda o diretório de saída de out para outro nome.next build (como SSG tradicional); geram HTML estático + payload estático para navegação — sem mudanças necessárias, exceto se usarem dynamic server functions.GET; precisam de export const dynamic = 'force-static' explícito para serem prerenderizados durante o build, gerando arquivo estático (ex. data.json).images.loader: 'custom' + loaderFile apontando pra um loader customizado (ex. Cloudinary) — o loader padrão do next/image não é suportado.const nextConfig = {
output: 'export',
}
module.exports = nextConfig
export const dynamic = 'force-static'
export async function GET() {
return Response.json({ name: 'Lee' })
}
data.json no build.location / {
try_files $uri $uri.html $uri/ =404;
}
location /blog/ {
rewrite ^/blog/(.*)$ /blog/$1.html break;
}
.html gerados corretamente.| Versão | Mudança |
|---|---|
| v14.0.0 | next export removido em favor de "output": "export" |
| v13.4.0 | App Router (Stable) ganha suporte estendido a static export, incluindo RSC e Route Handlers |
| v13.3.0 | next export depreciado, substituído por "output": "export" |
generateStaticParams()/com dynamicParams: true: nenhum desses é suportado em static export — usar qualquer um deles com next dev sob export gera erro (equivalente a export const dynamic = 'error' no root layout).window/localStorage/navigator fora de useEffect em Client Component: essas Web APIs não existem no servidor durante o prerender do build.output: 'export' é a substituição atual do antigo next export (removido na v14).GET e precisam do marcador explícito force-static.