تعطل Node + tsx بسبب الخطأ “__name is not a function”
الحالة
تم الحل. لا يمكن إعادة إنتاج هذا التعطل باستخدام إصدارtsx الحالي المثبّت في
package.json (4.22.3) أو إصدارات Node الحالية. أُبقيت هذه الصفحة هنا تحسبًا
لإعادة ظهور المشكلة نتيجة ترقية مستقبلية لـ tsx/esbuild.
العَرَض الأصلي
فشل تشغيل نصوص تطوير OpenClaw البرمجية عبرtsx عند بدء التشغيل مع ظهور:
tsx (2871657e،
2026-01-06) لجعل Bun اختياريًا. ولم يتعطل المسار المكافئ المعتمد على Bun.
رُصدت المشكلة في الأصل على Node v25.3.0 في macOS؛ وكان من المرجح أيضًا تأثر
المنصات الأخرى التي تشغّل Node 25.
السبب
يحوّلtsx شيفرة TS/ESM عبر esbuild مع تثبيت keepNames: true صراحةً ضمن
خيارات التحويل. يجعل هذا الإعداد esbuild يغلّف تعريفات الدوال/الفئات المسماة
باستدعاء مساعد __name، لكي تبقى fn.name محفوظة بعد التصغير
والحزم. يعني التعطل أن المساعد كان مفقودًا أو محجوبًا عند موضع الاستدعاء
لهذه الوحدة ضمن توليفة tsx/Node المتأثرة، ولذلك طرح __name(...)
خطأً بدلًا من إعادة القيمة المغلّفة.
فحص إعادة الإنتاج الحالي
__name is not a function مرة أخرى، فالتقط إصدار Node الدقيق وإصدار tsx
(node_modules/tsx/package.json) وتتبع المكدس الكامل قبل رفع المشكلة إلى
المشروع الأصلي.
الحلول البديلة (إذا عاد التعطل)
-
شغّل نصوص التطوير البرمجية باستخدام Bun بدلًا من
node --import tsx. -
شغّل
pnpm tsgoللتحقق من الأنواع، ثم شغّل المخرجات المبنية بدلًا من تشغيل المصدر عبرtsx: -
جرّب إصدارًا مختلفًا من
tsx(يُعدpnpm add -D tsx@<version>تغييرًا في التبعيات ويتطلب موافقة وفقًا لسياسة المستودع) لتحديد ما إذا كان إصدار esbuild المضمّن فيه قد أعاد إدخال الخلل. - اختبر باستخدام إصدار رئيسي/فرعي مختلف من Node لمعرفة ما إذا كان الفشل خاصًا بإصدار معين.