Receba notificações sobre os próximos lançamentos de Intlayer

    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:

    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:

    pnpm buildgrep -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.