2.9 KiB
2.9 KiB
F-132 — Frontend home DYNAMIC_SERVER_USAGE
Diagnóstico
Build del frontend (Turbopack) emitía dos DYNAMIC_SERVER_USAGE para /:
Route / couldn't be rendered statically because it used revalidate: 0 fetch
http://192.168.18.93:3000/products/search?limit=8
Route / couldn't be rendered statically because it used no-store fetch
http://192.168.18.93:3000/categories/tree
Causa: frontend/src/lib/api.ts declaraba cache: 'no-store' en todas las funciones de fetching (fetchCategories, fetchProducts, etc.). Esto fuerza render dinámico en cualquier página que las llame, anulando el export const revalidate = 3600 de app/page.tsx.
Adicionalmente, 4 warnings de Turbopack sobre filesystem access dinámico en frontend/src/app/uploads/[...path]/route.ts (path.join(root, filename) con root variable desde UPLOAD_ROOTS).
Diseño
frontend/src/lib/api.ts
- Quitar
cache: 'no-store'de las funciones que se llaman desde server components (fetchCategories,fetchProducts,fetchBrandBySlug,fetchPage,fetchBrands,fetchCategoryBySlug,fetchProductBySlug,fetchProductVariants,fetchVariantPrice,fetchStockAvailability). - Mantener
cache: 'no-store'solo enfetchSearchSuggestions(llamada por componentes cliente / barra de búsqueda que necesitan datos frescos).
Páginas server-rendered
Añadir export const revalidate = 3600 a:
frontend/src/app/products/page.tsxfrontend/src/app/products/[slug]/page.tsxfrontend/src/app/categories/page.tsxfrontend/src/app/categories/[slug]/page.tsxfrontend/src/app/brands/page.tsxfrontend/src/app/brands/[slug]/page.tsx
Búsqueda
frontend/src/app/search/page.tsx:export const dynamic = 'force-dynamic'(searchParams dinámicos, no se cachea).
Uploads route
- Añadir comentarios
/*turbopackIgnore: true*/dentro de las llamadaspath.join(...)que usan variables runtime (root,original.root,cacheDir) enfrontend/src/app/uploads/[...path]/route.ts. La página ya esforce-dynamicasí que los warnings son puramente de análisis estático.
Riesgos
- Bajo. Cambio de comportamiento: las páginas con datos pasarán a ISR (cache 1h). Si el operador crea un producto, no aparece en la web hasta 1h después.
- Mitigación: para invalidación inmediata el backend ya soporta
revalidatePathdesde admin (futuro). Por ahora se acepta 1h de stale. - Búsqueda sigue siendo force-dynamic (datos frescos siempre).
Plan
- Editar
frontend/src/lib/api.ts(quitarcache: 'no-store'de las 10 funciones server-side). - Añadir
revalidate = 3600a las 6 páginas listadas. - Añadir
force-dynamica/search. - Añadir comentarios turbopackIgnore a uploads/route.ts.
cd frontend && npx tsc --noEmit.cd frontend && NEXT_PUBLIC_API_URL=… npm run build.- Verificar:
Route /ahora es○ StaticconRevalidate 1h. - Verificar: 0 errores DYNAMIC_SERVER_USAGE, 0 warnings de filesystem.
- Cerrar gates.