Fallo “__name is not a function” con Node + tsx
Resumen
Ejecutar OpenClaw con Node usandotsx falla al iniciarse con:
tsx (commit 2871657e, 2026-01-06). La misma ruta de runtime funcionaba con Bun.
Entorno
- Node: v25.x (observado en v25.3.0)
- tsx: 4.21.0
- SO: macOS (la reproducción también es probable en otras plataformas que ejecuten Node 25)
Reproducción (solo Node)
Reproducción mínima en el repositorio
Comprobación de la versión de Node
- Node 25.3.0: falla
- Node 22.22.0 (Homebrew
node@22): falla - Node 24: aún no está instalado aquí; necesita verificación
Notas / hipótesis
tsxusa esbuild para transformar TS/ESM.keepNamesde esbuild emite un helper__namey envuelve las definiciones de funciones con__name(...).- El fallo indica que
__nameexiste, pero no es una función en runtime, lo que implica que falta el helper o fue sobrescrito para este módulo en la ruta del cargador de Node 25. - Se han informado problemas similares con el helper
__nameen otros consumidores de esbuild cuando falta el helper o se reescribe.
Historial de regresión
2871657e(2026-01-06): los scripts cambiaron de Bun a tsx para hacer que Bun fuera opcional.- Antes de eso (ruta de Bun),
openclaw statusygateway:watchfuncionaban.
Soluciones alternativas
- Usar Bun para scripts de desarrollo (reversión temporal actual).
-
Usar Node + watch de tsc y luego ejecutar la salida compilada:
-
Confirmado localmente:
pnpm exec tsc -p tsconfig.json+node openclaw.mjs statusfunciona en Node 25. -
Desactivar
keepNamesde esbuild en el cargador TS si es posible (evita la inserción del helper__name); tsx actualmente no expone esto. -
Probar Node LTS (22/24) con
tsxpara ver si el problema es específico de Node 25.
Referencias
- https://opennext.js.org/cloudflare/howtos/keep_names
- https://esbuild.github.io/api/#keep-names
- https://github.com/evanw/esbuild/issues/1031
Próximos pasos
- Reproducir en Node 22/24 para confirmar la regresión en Node 25.
- Probar
tsxnightly o fijar una versión anterior si existe una regresión conocida. - Si también se reproduce en Node LTS, abrir un informe mínimo de reproducción upstream con el stack trace de
__name.