---
createdAt: 2026-01-11
updatedAt: 2026-01-11
title: `vite-env-only` y Intlayer – error falso positivo `node:fs` import denegado
description: Por qué vite-env-only informa una importación `node:fs` denegada con Intlayer + React-Router + Vite y qué hacer.
keywords:
- intlayer
- vite
- react-router
- vite-env-only
- node:fs
- import denied
- alias
- client bundle
slugs:
- frequent-questions
- vite-env-only-node-fs-false-positive
---
# `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:
```bash
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.:
```bash
pnpm build
grep -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.