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:

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

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

En küçük yalıtılmış yeniden üretim örneği (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 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 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ı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.

Kaynaklar

İlgili

Was this useful?
On this page

On this page