Melhores Práticas de Configuração do Next.js
Um resumo condensado das 25 melhores práticas mais importantes extraídas de cada página desta seção.
Busque em todas as páginas da documentação
Um resumo condensado das 25 melhores práticas mais importantes extraídas de cada página desta seção.
🤖 Read the SystemsArchitect.io Blog for over 100+ cloud architecture articles 🔥
AUTH_SECRET de 32+ caracteres; use npx auth secret para obter um valor criptograficamente forte e dê segredos diferentes para desenvolvimento e produção, para que uma chave de desenvolvimento vazada não comprometa sessões reais.auth.config.ts seguro para edge (sem adaptadores, sem drivers de banco de dados) separado de auth.ts, onde você configura o adaptador de banco de dados, para que o middleware possa chamar auth() sob o Edge Runtime sem importar código exclusivo para Node.Session e JWT em types/next-auth.d.ts via aumento de módulo para que session.user.role, subscriptionStatus, etc. sejam tipados em todos os Server Components, actions e middleware.create-next-app@15 (ou qualquer versão principal que você queira) e passe --reset-preferences ou flags explícitas em CI para que os scaffolds sejam determinísticos.cache: "auto", não force-cache, então defina cache ou next: { revalidate: N } em cada fetch em vez de assumir que os dados estão em cache - o fetching silencioso por solicitação é uma regressão comum do Next 14.output: "standalone" produz um servidor minúsculo autônomo, mas exclui .next/static e public/ - seu Dockerfile ou script de deploy deve copiar ambos, caso contrário, o aplicativo servirá 404s para os assets.127.0.0.1 por padrão, então dentro de um contêiner Fargate/EKS/Docker você deve definir ENV HOSTNAME=0.0.0.0 (e uma PORT explícita) ou o health check do load balancer nunca alcançará o aplicativo.cacheHandler baseado em Redis em next.config com cacheMaxMemorySize: 0.pm2 reload faz uma reinicialização gradual e elegante entre os workers do cluster para deploys sem downtime; pm2 restart mata todos os workers e produz uma janela de indisponibilidade visível./_next/static/ e public/ diretamente com Cache-Control: public, immutable, max-age=31536000 para que os assets estáticos ignorem o Node completamente e sobrevivam às reinicializações do aplicativo..next/server/ e .next/static/, mas manter .next/cache/ para que os caches ISR e de build sobrevivam; um rm -rf .next bruto os apaga e força reconstruções completas mais regeneração ISR a frio.globalThis em desenvolvimento para que o hot-reload não abra um novo pool de conexões a cada salvamento - sem isso, o Postgres recusa novas conexões em minutos e o servidor de desenvolvimento trava..env, não .env.local, então prisma generate e migrate falham silenciosamente ou com mensagens confusas se a URL estiver apenas em .env.local.revalidatePath (ou revalidateTag) depois, caso contrário, a renderização do Server Component em cache continuará servindo dados desatualizados e a UI parecerá não atualizar.prisma migrate deploy (não interativo, aplica migrações commitadas); prisma migrate dev é interativo, pode resetar o banco de dados e nunca deve ser executado contra produção ou staging.gray-matter retorna quaisquer chaves que estejam no arquivo, então passe o resultado por um schema Zod para capturar erros de digitação e campos obrigatórios ausentes no momento da importação, em vez de enviar documentação quebrada.<Tag /> são parseadas como JSX, então envolva exemplos de código em backticks ou escape as chaves - caso contrário, o MDX lançará erros de build em prosa que parece normal em Markdown simples.events.createUser do Auth.js, não durante o checkout, para que não haja uma corrida de duplo clique que produza clientes duplicados e o usuário tenha um ID Stripe no momento em que existir.stripe.webhooks.constructEvent(rawBody, sig, whsec); parsear JSON sem verificar a assinatura permite que qualquer pessoa mutate seu banco de dados via POSTs forjados.export const runtime = "nodejs" na rota do webhook Stripe porque crypto.createHmac não está disponível no Edge Runtime, e use um STRIPE_WEBHOOK_SECRET distinto por ambiente ou as assinaturas falharão silenciosamente.tailwind.config.js - tokens de tema, variantes e plugins são declarados em globals.css via @theme e @custom-variant, e o plugin PostCSS é @tailwindcss/postcss, não o antigo pacote tailwindcss.cn() (clsx + tailwind-merge), então concatene classes através de cn(...) em vez de template strings - caso contrário, as substituições de props do consumidor perderão aleatoriamente para os padrões.env da tarefa, então variáveis não listadas são undefined no momento da build; declare explicitamente cada variável de ambiente de build ou as chaves de cache não refletirão sua configuração.node_modules, então ao consumir pacotes internos do monorepo como @repo/ui adicione-os a transpilePackages em next.config.ts ou as importações darão erro na build.workspace:* é entendido apenas por pnpm, yarn e bun - npm não o parseia; defina "packageManager": "pnpm@…" no package.json raiz e use --frozen-lockfile em CI para evitar desvios.Revisado por Chris St. John·Última atualização: 19 de jul. de 2026
🤖 Read the SystemsArchitect.io Blog for over 100+ cloud architecture articles 🔥