Diagnostics
Node + tsx çökmesi
Node + tsx "__name is not a function" çökmesi
Durum
Çözüldü. Bu çökme, package.json içinde sabitlenen mevcut 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 tutulmuştur.
İlk belirti
OpenClaw geliştirme betiklerini tsx üzerinden çalıştırmak, başlangıçta şu hatayla başarısız oluyordu:
[openclaw] CLI başlatılamadı: TypeError: __name is not a function at createSubsystemLogger (src/logging/subsystem.ts) at <caller> (src/agents/auth-profiles/constants.ts)Satır numaraları verilmemiştir; ilk çökmeden bu yana her iki dosya da değiştiğinden belirtilen satırlar artık eşleşmemektedir.
Bu sorun, Bun'ı isteğe bağlı hâle getirmek amacıyla geliştirme betiklerinin Bun yerine
tsx kullanmaya geçmesinden sonra (2871657e, 2026-01-06) ortaya çıktı.
Bun tabanlı eşdeğer 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 etkilenmesi olası kabul edildi.
Neden
tsx, dönüşüm seçeneklerinde sabit kodlanmış keepNames: true ile TS/ESM'yi
esbuild üzerinden dönüştürür. Bu ayar, fn.name küçültme ve paketleme sırasında
korunsun diye esbuild'in adlandırılmış işlev/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(...), sarılmış değeri döndürmek yerine hata fırlattı.
Güncel yeniden oluşturma kontrolü
node --versionpnpm installnode --import tsx src/entry.ts statusAsgari yalıtılmış yeniden oluşturma (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 üst projeye bildirmeden önce tam Node sürümünü, tsx
sürümünü (node_modules/tsx/package.json) ve eksiksiz yığın izlemesini kaydedin.
Geçici çözümler (çökme geri dönerse)
-
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ı gereği onay gerektirir). -
Hatanın sürüme özgü olup olmadığını görmek için farklı bir Node ana/alt sürümünde test edin.