Ir al contenido

Fallo de Node + tsx

Fallo “__name is not a function” en Node + tsx

Sección titulada «Fallo “__name is not a function” en Node + tsx»

Ejecutar OpenClaw a través de Node con tsx falla al inicio con:

[openclaw] Failed to start CLI: TypeError: __name is not a function
at createSubsystemLogger (.../src/logging/subsystem.ts:203:25)
at .../src/agents/auth-profiles/constants.ts:25:20

Esto comenzó después de cambiar los scripts de desarrollo de Bun a tsx (commit 2871657e, 2026-01-06). La misma ruta de ejecución funcionaba con Bun.

  • 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)
Ventana de terminal
# in repo root
node --version
pnpm install
node --import tsx src/entry.ts status
Ventana de terminal
node --import tsx scripts/repro/tsx-name-repro.ts
  • Node 25.3.0: falla
  • Node 22.22.0 (Homebrew node@22): falla
  • Node 24: aún no instalado aquí; necesita verificación
  • tsx usa esbuild para transformar TS/ESM. El keepNames de esbuild emite una función auxiliar __name y envuelve las definiciones de funciones con __name(...).
  • El fallo indica que __name existe pero no es una función en tiempo de ejecución, lo que implica que el helper falta o ha sido sobrescrito para este módulo en la ruta del cargador de Node 25.
  • Se han reportado problemas similares con el helper __name en otros consumidores de esbuild cuando el helper falta o es reescrito.
  • 2871657e (2026-01-06): scripts cambiados de Bun a tsx para hacer que Bun sea opcional.
  • Antes de eso (ruta con Bun), openclaw status y gateway:watch funcionaban.
  • Usar Bun para los scripts de desarrollo (reversión temporal actual).

  • Use tsgo para la verificación de tipos del repositorio, luego ejecute la salida construida:

    Ventana de terminal
    pnpm tsgo
    node openclaw.mjs status
  • Nota histórica: tsc se usó aquí mientras se depuraba este problema de Node/tsx, pero los carriles de verificación de tipos del repositorio ahora usan tsgo.

  • Desactive esbuild keepNames en el cargador TS si es posible (evita la inserción del asistente __name); tsx actualmente no expone esto.

  • Pruebe Node LTS (22/24) con tsx para ver si el problema es específico de Node 25.

  • Reproducir en Node 22/24 para confirmar la regresión en Node 25.
  • Pruebe tsx nightly o fije a una versión anterior si existe una regresión conocida.
  • Si se reproduce en Node LTS, presente un repro mínimo upstream con el seguimiento de pila __name.