تعطل 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 لنصوص التطوير (الرجوع المؤقت الحالي).
-
استخدم Node + مراقبة tsc، ثم شغّل الخرج المترجم:
-
تم التأكد محليًا: يعمل
pnpm exec tsc -p tsconfig.json+node openclaw.mjs statusعلى Node 25. -
عطّل esbuild keepNames في محمل 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.
- اختبر
tsxالليلي أو ثبّته على إصدار أقدم إذا وُجد انحدار معروف. - إذا أمكن إعادة الإنتاج على Node LTS، فافتح بلاغًا مصغرًا عند المنبع مع تتبع المكدس الخاص بـ
__name.