Fallo de Node + tsx «__name is not a function»
Estado
Resuelto. Este fallo no se reproduce en la versión actual detsx fijada en
package.json (4.22.3) ni en las versiones actuales de Node. Se conserva aquí por si una
actualización futura de tsx/esbuild lo reintroduce.
Síntoma original
La ejecución de los scripts de desarrollo de OpenClaw mediantetsx fallaba al iniciarse con:
tsx (2871657e,
2026-01-06) para que Bun fuera opcional. La ruta equivalente basada en Bun no fallaba.
Se observó originalmente en Node v25.3.0 en macOS; también se consideró probable que
afectara a otras plataformas que ejecutaran Node 25.
Causa
tsx transforma TS/ESM mediante esbuild con keepNames: true codificado de forma fija en
sus opciones de transformación. Esa configuración hace que esbuild envuelva las declaraciones
de funciones y clases con nombre en una llamada a un asistente __name para que fn.name se conserve durante la minificación
y el empaquetado. El fallo significa que el asistente faltaba o quedaba oculto en el punto de
llamada de ese módulo en la combinación afectada de tsx/Node, por lo que __name(...)
generaba una excepción en lugar de devolver el valor envuelto.
Comprobación actual de reproducción
__name is not a function, capture la versión exacta de Node, la versión de tsx
(node_modules/tsx/package.json) y el seguimiento de pila completo antes de notificarlo al proyecto original.
Soluciones alternativas (si el fallo reaparece)
-
Ejecute los scripts de desarrollo con Bun en lugar de
node --import tsx. -
Ejecute
pnpm tsgopara comprobar los tipos y, a continuación, ejecute la salida compilada en lugar del código fuente mediantetsx: -
Pruebe una versión diferente de
tsx(pnpm add -D tsx@<version>es un cambio de dependencia y requiere aprobación según la política del repositorio) para determinar mediante bisección si la versión de esbuild que incluye ha reintroducido el error. - Pruebe con una versión principal o secundaria diferente de Node para determinar si el fallo es específico de la versión.