2.1 KiB
2.1 KiB
F-141 — Arquitectura del fix de build Next.js
Diagnóstico
Hay tres aplicaciones Next independientes en el monorepo:
project/apps/admin— panel admin.project/frontend— customer frontend, con/categoriescomo Server Component async.project/storefront— storefront SEO.
project/frontend no tenía turbopack.root ni outputFileTracingRoot. Además, /categories declara ISR (revalidate = 3600) y ejecuta fetchCategories() durante el prerender. Cuando NEXT_PUBLIC_API_URL apunta a 192.168.18.93:3000 y el backend no está levantado, el build falla con ECONNREFUSED.
El error posterior que intenta leer:
project/frontend/.next/prerender-manifest.json
es una consecuencia de que el build del frontend aborta antes de generar su manifest, no un archivo que deba copiarse desde otra aplicación.
Diseño
- Fijar la raíz de Turbopack a cada aplicación:
project/frontend/next.config.ts:turbopack.root = frontendRoot.- Mantener la configuración equivalente ya aplicada en admin y storefront.
- Fijar
outputFileTracingRoota la raíz de cada app para que Next no recorra el workspace ni confunda.nextde otra aplicación. - Convertir
/categoriesa renderizado dinámico (dynamic = 'force-dynamic') porque sus datos dependen del API vivo. Así el build no hace llamadas de negocio al backend; el fetch sucede cuando se atiende la petición. - Mantener la fuente de verdad y el contrato API intactos. No introducir mocks, datos paralelos ni fallback de categorías vacío.
No incluido
- No cambiar las URLs del API.
- No ocultar errores de runtime.
- No modificar
storefrontmás allá de la configuración necesaria. - No transformar todos los reportes o dashboards; eso pertenece a F-142.
Verificación
cd project/frontend && rm -rf .next && NEXT_PUBLIC_API_URL=http://192.168.18.93:3000 npm run builddebe terminar aunque el backend no esté disponible.- La salida no debe seleccionar
project/package-lock.jsonni mostrar el warning de lockfiles. project/frontend/.next/prerender-manifest.jsondebe existir después del build.- Admin, backend y storefront no deben perder su build.