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:

text
[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ü

bash
node --versionpnpm installnode --import tsx src/entry.ts status

Asgari yalıtılmış yeniden oluşturma (yalnızca ilk yığın izlemesindeki modülü yükler):

bash
node --import tsx scripts/repro/tsx-name-repro.ts

Her 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 tsx yerine Bun ile çalıştırın.

  • Tür denetimi için pnpm tsgo komutunu ç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 tsx sü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.

Kaynaklar

İlgili

Was this useful?
On this page

On this page