---
createdAt: 2026-01-11
updatedAt: 2026-01-11
title: `vite-env-only` e Intlayer – falso positivo errore `node:fs` negato
description: Perché vite-env-only segnala un import `node:fs` negato con Intlayer + React-Router + Vite e cosa fare.
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 nega `node:fs` con Intlayer
Se hai usato il plugin **vite-env-only** (come suggerito nelle vecchie indicazioni di React-Router v7) e vedi:
```bash
Error: [vite-env-only] Import denied
* Denied by specifier pattern: /^node:/
* Importer: index.html
* Import: "node:fs"
```
…anche se non c’è **`node:fs` nel tuo bundle client**, questo è un **falso positivo**.
## Cosa lo causa
`vite-env-only` esegue un controllo basato su Babel **all'inizio della risoluzione del grafo di Vite**, _prima_ di:
- aliasing (inclusi i mapping browser vs node di Intlayer),
- dead-code elimination,
- risoluzione SSR vs client,
- moduli virtuali come quelli di React-Router.
I pacchetti Intlayer contengono codice che può funzionare sia su Node sia sul browser. In una fase _intermedia_, un modulo built-in di Node come `node:fs` può apparire nel grafo **prima** che Vite lo rimuova dal build client. `vite-env-only` lo rileva e genera un errore immediato, anche se il bundle finale non lo contiene.
## React-Router e le convenzioni sui moduli lato server
Nella documentazione di React-Router sulle **convenzioni per i moduli lato server**
(https://reactrouter.com/api/framework-conventions/server-modules), il team **suggerisce esplicitamente di usare `vite-env-only`** per evitare che import specifici del server trapelino nel bundle client.
Tuttavia, quelle convenzioni si basano su aliasing di Vite, conditional exports e tree-shaking per rimuovere il codice server-only. Sebbene aliasing e conditional exports siano già applicati, alcune utilità basate su Node sono ancora presenti in pacchetti come `@intlayer/core` in quella fase (anche se non vengono mai importate nel client). Poiché il tree-shaking non è ancora stato eseguito, quelle funzioni vengono comunque analizzate da Babel, e `vite-env-only` rileva i loro import `node:` e segnala un falso positivo — anche se vengono correttamente eliminati dal bundle client finale.
## Come risolvere / aggirare
### Consigliato: Rimuovere `vite-env-only`
Rimuovi semplicemente il plugin. In molti casi non ti serve — Vite gestisce già le importazioni client vs server tramite la propria risoluzione.
Questo risolve il falso errore su `node:fs` senza modifiche a Intlayer.
### Verificare il build finale invece
Se vuoi comunque assicurarti che non ci siano built-in di Node nel client, falla **dopo la build**, per esempio:
```bash
pnpm build
grep -R "node:" dist/
```
Se non ci sono risultati, i tuoi bundle client sono puliti.
## Riepilogo
- `vite-env-only` può generare un errore su `node:fs` perché esegue il controllo troppo presto.
- Le convenzioni sui server modules di Vite + Intlayer + React-Router normalmente rimuovono correttamente i riferimenti server-only.
- Rimuovere il plugin o verificare l'_output finale_ è generalmente la soluzione migliore.