43 lines
2.1 KiB
Markdown
43 lines
2.1 KiB
Markdown
# 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 `/categories` como 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:
|
|
|
|
```text
|
|
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
|
|
|
|
1. 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.
|
|
2. Fijar `outputFileTracingRoot` a la raíz de cada app para que Next no recorra el workspace ni confunda `.next` de otra aplicación.
|
|
3. Convertir `/categories` a 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.
|
|
4. 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 `storefront` má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 build` debe terminar aunque el backend no esté disponible.
|
|
- La salida no debe seleccionar `project/package-lock.json` ni mostrar el warning de lockfiles.
|
|
- `project/frontend/.next/prerender-manifest.json` debe existir después del build.
|
|
- Admin, backend y storefront no deben perder su build.
|