Fallo de Node + tsx «__name is not a function»
Resumen
Ejecutar OpenClaw con Node usandotsx falla al iniciar con:
tsx (commit 2871657e, 2026-01-06). La misma ruta de ejecución funcionaba con Bun.
Entorno
- Node: v25.x (observado en v25.3.0)
- tsx: 4.21.0
- SO: macOS (es probable que también se reproduzca en otras plataformas que ejecuten Node 25)
Reproducción (solo Node)
Reproducción mínima en el repositorio
Verificación de 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 tiempo de ejecución, lo que implica que el helper falta o fue sobrescrito para este módulo en la ruta del cargador de Node 25. - Se han reportado problemas similares con el helper
__nameen otros consumidores de esbuild cuando el helper falta o fue reescrito.
Historial de regresión
2871657e(2026-01-06): los scripts cambiaron de Bun a tsx para que Bun fuera opcional.- Antes de eso (ruta con Bun),
openclaw statusygateway:watchfuncionaban.
Soluciones alternativas
- Usar Bun para los scripts de desarrollo (reversión temporal actual).
-
Usar
tsgopara la verificación de tipos del repositorio y luego ejecutar la salida compilada: -
Nota histórica: aquí se usó
tscdurante la depuración de este problema de Node/tsx, pero las rutas de verificación de tipos del repositorio ahora usantsgo. -
Deshabilitar
keepNamesde esbuild en el cargador TS si es posible (evita la inserción del helper__name); actualmente tsx 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 una 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 caso mínimo reproducible aguas arriba con el stack trace de
__name.