Crash Node + tsx “__name bukan sebuah fungsi”
Status
Terselesaikan. Crash ini tidak dapat direproduksi pada versitsx saat ini yang dipatok di
package.json (4.22.3) maupun pada rilis Node saat ini. Dokumentasi ini dipertahankan untuk berjaga-jaga jika
peningkatan tsx/esbuild di masa mendatang memunculkannya kembali.
Gejala awal
Menjalankan skrip pengembangan OpenClaw melaluitsx gagal saat startup dengan:
tsx (2871657e,
2026-01-06) agar Bun bersifat opsional. Jalur setara berbasis Bun tidak mengalami crash.
Masalah ini awalnya ditemukan pada Node v25.3.0 di macOS; platform lain yang menjalankan
Node 25 juga dianggap kemungkinan terdampak.
Penyebab
tsx mentransformasi TS/ESM melalui esbuild dengan keepNames: true yang ditetapkan secara permanen dalam
opsi transformasinya. Pengaturan tersebut membuat esbuild membungkus deklarasi fungsi/kelas
bernama dalam panggilan ke pembantu __name agar fn.name tetap dipertahankan setelah minifikasi
dan pemaketan. Crash tersebut berarti pembantu itu tidak ada atau tertutupi di lokasi
pemanggilan untuk modul tersebut dalam kombinasi tsx/Node yang terdampak, sehingga __name(...)
melempar galat alih-alih mengembalikan nilai yang dibungkus.
Pemeriksaan reproduksi saat ini
__name is not a function, catat versi Node yang tepat, versi tsx
(node_modules/tsx/package.json), dan jejak tumpukan lengkap sebelum melaporkannya ke hulu.
Solusi sementara (jika crash kembali)
-
Jalankan skrip pengembangan dengan Bun alih-alih
node --import tsx. -
Jalankan
pnpm tsgountuk pemeriksaan tipe, lalu jalankan keluaran hasil build alih-alih sumber melaluitsx: -
Coba versi
tsxlain (pnpm add -D tsx@<version>merupakan perubahan dependensi dan memerlukan persetujuan sesuai kebijakan repositori) untuk melakukan biseksi apakah versi esbuild yang disertakannya memunculkan kembali bug tersebut. - Uji pada versi mayor/minor Node yang berbeda untuk melihat apakah kegagalan tersebut spesifik pada versi tertentu.