Diagnostics
Node + tsx çökmesi
Node + tsx "__name is not a function" çökmesi
Durum
Çözüldü. Bu çökme, package.json içinde sabitlenmiş güncel tsx sürümünde
(4.22.3) veya güncel Node sürümlerinde yeniden oluşmuyor. Gelecekteki bir
tsx/esbuild yükseltmesinin sorunu yeniden ortaya çıkarması ihtimaline karşı
burada tutulmaktadır.
İlk belirti
OpenClaw geliştirme betiklerini tsx üzerinden çalıştırmak, başlangıçta şu
hatayla başarısız oluyordu:
[openclaw] Failed to start CLI: TypeError: __name is not a function at createSubsystemLogger (src/logging/subsystem.ts) at <caller> (src/agents/auth-profiles/constants.ts)Satır numaraları çıkarılmıştır; ilk çökmeden bu yana her iki dosya da değişti ve ilgili satırlar artık eşleşmiyor.
Bu sorun, Bun'ı isteğe bağlı hâle getirmek amacıyla geliştirme betikleri Bun'dan
tsx'e geçirildikten sonra (2871657e, 2026-01-06) ortaya çıktı. Eşdeğer Bun
tabanlı yol çökmüyordu. Sorun ilk olarak macOS üzerinde Node v25.3.0 ile
gözlemlendi; Node 25 çalıştıran diğer platformların da etkilenme olasılığı
yüksek kabul edildi.
Neden
tsx, TS/ESM'yi dönüştürme seçeneklerinde sabit olarak kodlanmış
keepNames: true ayarıyla esbuild üzerinden dönüştürür. Bu ayar, küçültme ve
paketleme sonrasında fn.name değerinin korunması için esbuild'in adlandırılmış
fonksiyon/sınıf bildirimlerini bir __name yardımcısı çağrısıyla sarmalamasına
neden olur. Çökme, etkilenen tsx/Node birleşiminde söz konusu modülün çağrı
noktasında yardımcının eksik olduğu veya gölgelendiği anlamına gelir; bu nedenle
__name(...), sarmalanmış değeri döndürmek yerine hata fırlattı.
Güncel yeniden üretim denetimi
node --versionpnpm installnode --import tsx src/entry.ts statusEn küçük yalıtılmış yeniden üretim örneği (yalnızca ilk yığın izlemesindeki modülü yükler):
node --import tsx scripts/repro/tsx-name-repro.tsHer iki komut da şu anda hatasız sonlanıyor. Bunlardan biri yeniden
__name is not a function hatası fırlatırsa sorunu üst projeye bildirmeden önce
tam Node sürümünü, tsx sürümünü (node_modules/tsx/package.json) ve yığın
izlemesinin tamamını kaydedin.
Geçici çözümler (çökme yeniden ortaya çıkarsa)
-
Geliştirme betiklerini
node --import tsxyerine Bun ile çalıştırın. -
Tür denetimi için
pnpm tsgokomutunu çalıştırın, ardından kaynağıtsxüzerinden çalıştırmak yerine derlenmiş çıktıyı çalıştırın:bash pnpm tsgonode openclaw.mjs status -
Paketlediği esbuild sürümünün hatayı yeniden ortaya çıkarıp çıkarmadığını ikiye bölerek belirlemek için farklı bir
tsxsürümü deneyin (pnpm add -D tsx@<version>bir bağımlılık değişikliğidir ve depo politikasına göre onay gerektirir). -
Hatanın belirli bir sürüme özgü olup olmadığını görmek için farklı bir Node ana/alt sürümünde test edin.