vite-env-only Intlayer ile node:fs'i reddediyor
Eğer vite-env-only eklentisini kullandıysanız (eski React-Router v7 önerilerinde belirtildiği gibi) ve şu hatayı görüyorsanız:
Error: [vite-env-only] Import denied* Denied by specifier pattern: /^node:/* Importer: index.html* Import: "node:fs"…istemci paketinizde node:fs olmasa bile, bu bir yanlış pozitif.
Buna ne sebep oluyor
vite-env-only, Vite grafik çözümlemesinin erken aşamasında Babel tabanlı bir kontrol çalıştırır, şundan önce:
- aliasing (Intlayer’ın tarayıcı vs node eşlemeleri dahil),
- kullanılmayan kodun kaldırılması (dead-code elimination),
- SSR ile istemci çözümlemesi,
- React-Router gibi sanal modüller.
Intlayer paketleri hem Node hem tarayıcı üzerinde çalışabilecek kod içerir. Bir ara aşamada, node:fs gibi bir Node yerleşiği grafikte Vite bunun istemci derlemesinden kaldırmasından önce görünebilir. vite-env-only bunu görür ve nihai paket bunu içermese bile hemen hata verir.
React-Router ve Sunucu Modülleri
React-Router dokümantasyonunda sunucu modülü konvansiyonları ile ilgili olarak (https://reactrouter.com/api/framework-conventions/server-modules), ekip, sunucuya özel importların istemci paketine sızmasını önlemek için açıkça vite-env-only kullanmayı önerir.
Ancak bu konvansiyonlar, sunucuya özel kodu kaldırmak için Vite’in aliasing’ine, conditional exports'ına ve tree-shaking’ine dayanır. Alias’lama ve conditional exports zaten uygulanmış olsa da, bazı Node tabanlı yardımcılar bu aşamada @intlayer/core gibi paketlerde hâlâ mevcut olabilir (istemcide hiç import edilmemiş olsalar bile). Çünkü tree-shaking henüz çalışmadığından, bu fonksiyonlar hâlâ Babel tarafından parse edilir ve vite-env-only onların node: importlarını tespit edip yanlış pozitif bir hata verir — oysa bunlar nihai istemci paketinden doğru şekilde temizlenir.
Nasıl düzeltilecek / geçici çözümler
Önerilen: vite-env-only'ı kaldırın
Eklentiyi basitçe kaldırın. Birçok durumda buna gerek yok — Vite kendi çözümlemesiyle istemci ve sunucu importlarını zaten yönetir.
Bu, Intlayer'da değişiklik yapmadan yanlış node:fs reddini düzeltir.
Bunun yerine son yapıyı doğrulayın
İstemci paketlerinde Node yerleşiklerinin bulunmadığından hâlâ emin olmak istiyorsanız, bunu build sonrası yapın, örn:
pnpm buildgrep -R "node:" dist/Eğer sonuç yoksa, istemci bundle'larınız temizdir.
Özet
- vite-env-only çok erken kontrol ettiği için node:fs üzerinde hata verebilir.
- Vite + Intlayer + React-Router'ın server modules konvansiyonları genellikle yalnızca sunucuya ait referansları doğru şekilde kaldırır.
- Eklentiyi kaldırmak veya nihai çıktıyı doğrulamak genellikle en iyi çözümdür.