تعطل Node + tsx بسبب الخطأ “__name is not a function”
الملخص
يفشل تشغيل OpenClaw عبر Node معtsx عند بدء التشغيل مع ظهور ما يلي:
tsx (الالتزام 2871657e، بتاريخ 2026-01-06). كان مسار وقت التشغيل نفسه يعمل مع Bun.
البيئة
- Node: v25.x (تمت ملاحظته على v25.3.0)
- tsx: 4.21.0
- نظام التشغيل: macOS (ومن المرجح أيضًا أن يظهر في بيئات أخرى تشغّل Node 25)
إعادة الإنتاج (Node فقط)
إعادة إنتاج مصغّرة داخل المستودع
التحقق من إصدار Node
- Node 25.3.0: يفشل
- Node 22.22.0 (Homebrew
node@22): يفشل - Node 24: غير مثبّت هنا بعد؛ يحتاج إلى تحقق
ملاحظات / فرضية
- يستخدم
tsxأداة esbuild لتحويل TS/ESM. يقوم خيارkeepNamesفي esbuild بإخراج مساعد__nameويلف تعريفات الدوال باستخدام__name(...). - يشير التعطل إلى أن
__nameموجود لكنه ليس دالة وقت التشغيل، ما يعني ضمنيًا أن هذا المساعد مفقود أو تمت الكتابة فوقه لهذه الوحدة في مسار مُحمِّل Node 25. - تم الإبلاغ عن مشكلات مشابهة تتعلق بالمساعد
__nameفي مستهلكين آخرين لـ esbuild عندما يكون المساعد مفقودًا أو يُعاد كتابته.
سجل الانحدار
2871657e(2026-01-06): تم تغيير النصوص من Bun إلى tsx لجعل Bun اختياريًا.- قبل ذلك (مسار Bun)، كان
openclaw statusوgateway:watchيعملان.
الحلول البديلة
- استخدام Bun لنصوص التطوير (الرجوع المؤقت الحالي).
-
استخدام
tsgoلفحص أنواع المستودع، ثم تشغيل الخرج المبني: -
ملاحظة تاريخية: تم استخدام
tscهنا أثناء تصحيح مشكلة Node/tsx هذه، لكن مسارات فحص الأنواع في المستودع تستخدم الآنtsgo. -
تعطيل
keepNamesالخاص بـ esbuild في مُحمِّل TS إن أمكن (فهذا يمنع إدراج المساعد__name)؛ ولا يوفّر tsx حاليًا هذا الخيار. -
اختبار Node LTS (22/24) مع
tsxلمعرفة ما إذا كانت المشكلة خاصة بـ Node 25.
المراجع
- https://opennext.js.org/cloudflare/howtos/keep_names
- https://esbuild.github.io/api/#keep-names
- https://github.com/evanw/esbuild/issues/1031
الخطوات التالية
- إعادة الإنتاج على Node 22/24 لتأكيد ما إذا كان هناك انحدار في Node 25.
- اختبار
tsxnightly أو تثبيته على إصدار أقدم إذا كان هناك انحدار معروف. - إذا أمكن إعادة إنتاجه على Node LTS، فافتح إعادة إنتاج مصغّرة لدى المصدر مع تتبع مكدس
__name.