---
createdAt: 2026-01-11
updatedAt: 2026-01-11
title: `vite-env-only` & Intlayer – faux positif : import `node:fs` refusé
description: Pourquoi vite-env-only signale un import `node:fs` refusé avec Intlayer + React-Router + Vite et que faire.
keywords:
- intlayer
- vite
- react-router
- vite-env-only
- node:fs
- import refusé
- alias
- client bundle
slugs:
- frequent-questions
- vite-env-only-node-fs-false-positive
---
# vite-env-only refuse `node:fs` avec Intlayer
Si vous avez utilisé le plugin **vite-env-only** (comme mentionné dans d'anciennes suggestions pour React-Router v7) et que vous voyez :
```bash
Error: [vite-env-only] Import denied
* Denied by specifier pattern: /^node:/
* Importer: index.html
* Import: "node:fs"
```
…même s'il n'y a **aucun `node:fs` dans votre bundle client**, il s'agit d'un **faux positif**.
## Quelle en est la cause
`vite-env-only` effectue une vérification basée sur Babel **tôt dans la résolution du graphe Vite**, _avant_ :
- les alias (y compris les mappages browser vs node d'Intlayer),
- l'élimination du code mort,
- la résolution SSR vs client,
- les modules virtuels comme ceux de React-Router.
Les packages Intlayer contiennent du code pouvant s'exécuter à la fois sur Node et dans le navigateur. À un stade _intermédiaire_, un module natif Node comme `node:fs` peut apparaître dans le graphe **avant** que Vite ne l'élimine du build client. `vite-env-only` le détecte et génère immédiatement une erreur, même si le bundle final ne le contient pas.
## React-Router et les modules serveur
Dans la documentation de React-Router au sujet des **conventions des modules serveur**
(https://reactrouter.com/api/framework-conventions/server-modules), l'équipe **suggère explicitement d'utiliser `vite-env-only`** pour empêcher que des imports réservés au serveur ne fuient dans le bundle client.
Cependant, ces conventions s'appuient sur l'aliasing de Vite, les exports conditionnels et le tree-shaking pour éliminer le code réservé au serveur. Alors que l'aliasing et les exports conditionnels sont déjà appliqués, certains utilitaires basés sur Node sont encore présents dans des packages comme `@intlayer/core` à ce stade (même s'ils ne sont jamais importés côté client). Comme le tree-shaking n'a pas encore été exécuté, ces fonctions sont toujours analysées par Babel, et `vite-env-only` détecte leurs imports `node:` et génère un faux positif — alors qu'ils sont correctement purgés du bundle client final.
## Comment corriger / contourner
### Recommandation : Supprimer `vite-env-only`
Supprimez simplement le plugin. Dans de nombreux cas, vous n'en avez pas besoin — Vite gère déjà les imports client vs serveur via sa propre résolution.
Cela corrige la fausse erreur sur `node:fs` sans modification d'Intlayer.
### Valider la build finale à la place
Si vous souhaitez toujours vous assurer qu'aucune API Node intégrée ne se retrouve dans le client, faites-le **après la compilation**, par ex. :
```bash
pnpm build
grep -R "node:" dist/
```
S'il n'y a aucun résultat, vos bundles client sont propres.
## Résumé
- `vite-env-only` peut générer une erreur sur `node:fs` car il vérifie trop tôt.
- Vite + Intlayer + les conventions des server modules de React-Router suppriment normalement correctement les références réservées au serveur.
- Supprimer le plugin ou vérifier la _sortie finale_ est généralement la meilleure solution.