Recibe notificaciones sobre los próximos lanzamientos de Intlayer

    vite-env-only deniega node:fs con Intlayer

    Si usaste el plugin vite-env-only (como se menciona en sugerencias antiguas de React-Router v7) y ves:

    Error: [vite-env-only] Import denied* Denied by specifier pattern: /^node:/* Importer: index.html* Import: "node:fs"

    …aunque no haya node:fs en tu client bundle, esto es un falso positivo.

    Qué lo causa

    vite-env-only ejecuta una comprobación basada en Babel temprano en la resolución del grafo de Vite, antes de:

    • aliasing (incluyendo los mappings browser vs node de Intlayer),
    • dead-code elimination,
    • SSR vs client resolution,
    • módulos virtuales como los de React-Router.

    Los paquetes de Intlayer contienen código que puede funcionar tanto en Node como en el navegador. En una etapa intermedia, una API integrada de Node como node:fs puede aparecer en el grafo antes de que Vite la elimine del client build. vite-env-only detecta eso y lanza un error de inmediato, aunque el bundle final no lo incluya.

    React-Router y convenciones de módulos del servidor

    (https://reactrouter.com/api/framework-conventions/server-modules), el equipo sugiere explícitamente usar vite-env-only para evitar que las importaciones exclusivas del servidor se filtren en el bundle del cliente.

    Sin embargo, esas convenciones dependen del aliasing de Vite, las exportaciones condicionales y el tree-shaking para eliminar el código exclusivo del servidor. Aunque el aliasing y las exportaciones condicionales ya se aplican, algunas utilidades basadas en Node aún están presentes en paquetes como @intlayer/core en esa etapa (aunque nunca se importan en el cliente). Como el tree-shaking no se ha ejecutado todavía, esas funciones todavía son parseadas por Babel, y vite-env-only detecta sus importaciones node: y produce un falso positivo — aunque se purgan correctamente del bundle final del cliente.

    Cómo solucionarlo / soluciones alternativas

    Recomendado: Eliminar vite-env-only

    Simplemente elimina el plugin. En muchos casos no lo necesitas — Vite ya gestiona las importaciones cliente vs servidor mediante su propia resolución.

    Esto soluciona la denegación falsa de node:fs sin cambios en Intlayer.

    Valida la compilación final en su lugar

    Si aún quieres asegurarte de que no haya módulos integrados de Node en el cliente, hazlo después del build, p. ej.:

    pnpm buildgrep -R "node:" dist/

    Si no hay resultados, tus bundles del cliente están limpios.

    Resumen

    • vite-env-only puede arrojar un error sobre node:fs porque comprueba demasiado pronto.
    • Vite + Intlayer + las convenciones de server modules de React-Router normalmente eliminan correctamente las referencias exclusivas del servidor.
    • Eliminar el plugin o verificar el resultado final suele ser la mejor solución.