---
createdAt: 2026-01-11
updatedAt: 2026-01-11
title: `vite-env-only` i Intlayer – fałszywy pozytyw: odmowa importu `node:fs`
description: Dlaczego vite-env-only zgłasza odmowę importu `node:fs` przy Intlayer + React-Router + Vite i co z tym zrobić.
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 odrzuca `node:fs` w Intlayer
Jeśli używasz wtyczki **vite-env-only** (jak wspomniano w starszych sugestiach React-Router v7) i widzisz:
```bash
Error: [vite-env-only] Import denied
* Denied by specifier pattern: /^node:/
* Importer: index.html
* Import: "node:fs"
```
…mimo że **w twoim pakiecie klienckim nie ma `node:fs`**, jest to **fałszywy alarm**.
## Co to powoduje
`vite-env-only` wykonuje sprawdzenie oparte na Babel **wcześnie w fazie rozwiązywania grafu Vite**, _zanim_:
- aliasowanie (w tym mapowania Intlayer dla przeglądarki vs node),
- eliminacja martwego kodu,
- rozwiązywanie SSR vs klienta,
- moduły wirtualne, takie jak te z React-Routera.
Pakiety Intlayer zawierają kod, który może działać zarówno na Node, jak i w przeglądarce. Na etapie _pośrednim_ w grafie może pojawić się wbudowany moduł Node, taki jak `node:fs`, **zanim** Vite usunie go z kompilacji dla klienta. `vite-env-only` to wykrywa i natychmiast zgłasza błąd, mimo że finalny bundle go nie zawiera.
## React-Router i moduły serwerowe
W dokumentacji React-Router dotyczącej **konwencji modułów serwerowych**
(https://reactrouter.com/api/framework-conventions/server-modules), zespół **wyraźnie sugeruje użycie `vite-env-only`**, aby zapobiec przedostawaniu się importów tylko dla serwera do bundle'a klienta.
Jednakże te konwencje opierają się na aliasingu Vite, conditional exports oraz tree-shaking, aby usunąć kod tylko dla serwera. Chociaż aliasing i conditional exports są już stosowane, niektóre narzędzia oparte na Node nadal występują w pakietach takich jak `@intlayer/core` na tym etapie (nawet jeśli nigdy nie są importowane po stronie klienta). Ponieważ tree-shaking jeszcze się nie uruchomił, te funkcje są nadal parsowane przez Babel, a `vite-env-only` wykrywa ich importy `node:` i zgłasza false positive — mimo że są poprawnie usuwane z ostatecznego bundle'a klienta.
## Jak naprawić / obejść
### Zalecane: Usuń `vite-env-only`
Po prostu usuń wtyczkę. W wielu przypadkach nie jest ona potrzebna — Vite sam obsługuje rozróżnienie importów dla klienta i serwera poprzez własne rozwiązywanie.
To naprawia fałszywy błąd dotyczący `node:fs` bez konieczności wprowadzania zmian w Intlayer.
### Zamiast tego zweryfikuj końcowy build
Jeśli nadal chcesz upewnić się, że żadne wbudowane moduły Node nie trafiają do klienta, sprawdź to **po buildzie**, np.:
```bash
pnpm build
grep -R "node:" dist/
```
Jeśli brak wyników, twoje client bundles są czyste.
## Podsumowanie
- `vite-env-only` może zgłaszać błąd dotyczący `node:fs`, ponieważ sprawdza zbyt wcześnie.
- Vite + Intlayer + konwencje modułów serwerowych React-Routera zwykle poprawnie usuwają odwołania przeznaczone wyłącznie dla serwera.
- Usunięcie wtyczki lub weryfikacja _końcowego wyniku_ zwykle jest najlepszym rozwiązaniem.