Terima notifikasi tentang rilis Intlayer yang akan datang

    vite-env-only menolak node:fs dengan Intlayer

    Jika Anda menggunakan plugin vite-env-only (seperti disarankan dalam dokumentasi React-Router v7 yang lebih lama) dan melihat:

    Error: [vite-env-only] Import denied* Denied by specifier pattern: /^node:/* Importer: index.html* Import: "node:fs"

    …meskipun tidak ada node:fs di bundel klien Anda, ini adalah false positive.

    Apa penyebabnya

    vite-env-only menjalankan pemeriksaan berbasis Babel lebih awal dalam resolusi graph Vite, sebelum:

    • aliasing (termasuk pemetaan browser vs node milik Intlayer),
    • dead-code elimination,
    • resolusi SSR vs client,
    • modul virtual seperti milik React-Router.

    Paket Intlayer berisi kode yang dapat berjalan di Node maupun browser. Pada tahap perantara, built-in Node seperti node:fs mungkin muncul dalam graph sebelum Vite menghapusnya dari build klien. vite-env-only melihat itu dan langsung menghasilkan error, meskipun bundle akhir tidak mengandungnya.

    React-Router dan Konvensi Modul Server

    Dalam dokumentasi React-Router tentang konvensi modul server
    (https://reactrouter.com/api/framework-conventions/server-modules), tim secara eksplisit menyarankan menggunakan vite-env-only untuk mencegah impor yang hanya untuk server bocor ke bundle klien.

    Namun, konvensi tersebut bergantung pada aliasing Vite, conditional exports, dan tree-shaking untuk menghapus kode yang hanya untuk server. Meskipun aliasing dan conditional exports sudah diterapkan, beberapa utilitas berbasis Node masih hadir dalam paket seperti @intlayer/core pada tahap itu (meskipun mereka tidak pernah diimpor di sisi klien). Karena tree-shaking belum dijalankan, fungsi-fungsi tersebut masih diparsing oleh Babel, dan vite-env-only mendeteksi impor node: mereka dan menghasilkan false positive — meskipun impor tersebut benar-benar dibersihkan dari bundle klien akhir.

    Cara memperbaiki / mengatasi

    Direkomendasikan: Hapus vite-env-only

    Cukup hapus plugin tersebut. Dalam banyak kasus Anda tidak membutuhkannya — Vite sudah menangani impor client vs server melalui resolusinya sendiri.

    Ini memperbaiki penolakan node:fs yang keliru tanpa perubahan pada Intlayer.

    Validasi build akhir sebagai gantinya

    Jika Anda masih ingin memastikan tidak ada built-in Node di client, lakukan itu setelah build, misalnya:

    pnpm buildgrep -R "node:" dist/

    Jika tidak ada hasil, bundle client Anda bersih.

    Ringkasan

    • vite-env-only dapat menghasilkan error pada node:fs karena ia melakukan pengecekan terlalu awal.
    • Konvensi server modules Vite + Intlayer + React-Router biasanya menghapus referensi yang hanya untuk server dengan benar.
    • Menghapus plugin tersebut atau memverifikasi hasil akhir biasanya merupakan solusi terbaik.