---
createdAt: 2026-01-11
updatedAt: 2026-01-11
title: "`vite-env-only` e Intlayer – falso positivo: erro `node:fs` negado"
description: Por que o vite-env-only reporta uma importação `node:fs` negada com Intlayer + React-Router + Vite e o que fazer.
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` com Intlayer

Se você usou o plugin **vite-env-only** (conforme mencionado em sugestões antigas do React-Router v7) e vir:

```bash

Error: [vite-env-only] Import denied

* Denied by specifier pattern: /^node:/
* Importer: index.html
* Import: "node:fs"

```

…mesmo que não haja **`node:fs` no bundle do cliente**, isto é um **falso positivo**.

## O que causa

`vite-env-only` executa uma verificação baseada em Babel **cedo na resolução do grafo do Vite**, _antes de_:

- aliasing (incluindo os mapeamentos browser vs node do Intlayer),
- eliminação de código morto,
- resolução SSR vs client,
- módulos virtuais como os do React-Router.

Os pacotes do Intlayer contêm código que pode funcionar tanto no Node como no browser. Numa fase _intermédia_, um builtin do Node como `node:fs` pode aparecer no grafo **antes** do Vite o remover do build do cliente. O `vite-env-only` vê isso e gera um erro imediatamente, mesmo que o bundle final não o contenha.

## React-Router e Módulos de Servidor

Na documentação do React-Router sobre as **convenções de módulos de servidor**
(https://reactrouter.com/api/framework-conventions/server-modules), a equipe **sugere explicitamente usar `vite-env-only`** para evitar que importações exclusivas do servidor vazem para o bundle do cliente.

Porém, essas convenções dependem do aliasing do Vite, das conditional exports e do tree-shaking para remover o código exclusivo do servidor. Embora o aliasing e as conditional exports já estejam aplicados, alguns utilitários baseados em Node ainda estão presentes em pacotes como `@intlayer/core` nessa fase (mesmo que nunca sejam importados pelo cliente). Como o tree-shaking ainda não foi executado, essas funções ainda são analisadas pelo Babel, e o `vite-env-only` detecta suas importações `node:` e gera um falso positivo, mesmo que elas sejam corretamente purgadas do bundle final do cliente.

## Como corrigir / contornar

### Recomendado: Remover `vite-env-only`

Simplesmente remova o plugin. Em muitos casos você não precisa dele, o Vite já lida com importações cliente vs servidor através da sua própria resolução.

Isto corrige o erro falso de `node:fs` sem alterações no Intlayer.

### Validar o build final em vez disso

Se ainda quiser garantir que não há built-ins do Node no cliente, faça isso **após o build**, por exemplo:

```bash
pnpm build
grep -R "node:" dist/
```

Se não houver resultados, os bundles do cliente estão limpos.

## Resumo

- `vite-env-only` pode gerar erro sobre `node:fs` porque verifica cedo demais.
- O Vite + Intlayer + as convenções de server modules do React-Router normalmente removem corretamente as referências server-only.
- Remover o plugin ou verificar o _final output_ normalmente é a melhor solução.
