deploymentId
Core Idea
Define um identificador de deployment usado para proteção contra version skew e cache busting durante deploys rolling.
Key Concepts
- deploymentId: string identificadora do deployment atual; tem precedência sobre
NEXT_DEPLOYMENT_ID
- NEXT_DEPLOYMENT_ID: variável de ambiente alternativa para setar o mesmo valor
- version skew protection: mecanismo que evita mistura de assets entre versões antiga/nova durante rollout
Code Examples
module.exports = {
deploymentId: 'my-deployment-id',
}
- O que demonstra: configuração estática do deployment ID.
NEXT_DEPLOYMENT_ID=my-deployment-id next build
- O que demonstra: setar via variável de ambiente no build.
module.exports = {
deploymentId: process.env.DEPLOYMENT_VERSION || process.env.GIT_SHA,
}
- O que demonstra: usar SHA do commit ou versão como ID em ambientes multi-servidor atrás de load balancer.
Reference Tables
| Version | Changes |
|---|
v16.2.0 | Pages Router detecta version skew pelo header de resposta em vez do build ID; build ID fica constante quando deploymentId está setado |
v14.1.4 | deploymentId estabilizado como opção top-level |
v13.4.10 | experimental.deploymentId introduzido |
Anti-patterns
- Esperar que
?dpl= faça roteamento por versão: Next.js não lê esse query param nas requests recebidas, ele serve só pra cache busting; roteamento por deployment precisa vir do host/CDN
Key Takeaways
- Quando configurado, o Next.js: acrescenta
?dpl=<id> em assets estáticos, adiciona headers x-deployment-id/x-nextjs-deployment-id, injeta data-dpl-id no <html>, e inclui o ID na cache key do 'use cache'
- Mismatch de deployment ID entre client e server dispara hard navigation (reload completo) em vez de navegação client-side
- Em multi-servidor, todas as instâncias do mesmo deployment devem compartilhar o mesmo
deploymentId
- Sem roteamento por deployment no host/CDN, clientes que caem numa instância de outro deployment durante rollout apenas recarregam, não navegam corretamente
Connects To
- generateBuildId: opção relacionada de identificação de build
- 'use cache' directive:
deploymentId entra na cache key dessa diretiva