Arresto anomalo di Node + tsx “__name is not a function”
Riepilogo
L’esecuzione di OpenClaw tramite Node contsx fallisce all’avvio con:
tsx (commit 2871657e, 2026-01-06). Lo stesso percorso di runtime funzionava con Bun.
Ambiente
- Node: v25.x (osservato su v25.3.0)
- tsx: 4.21.0
- OS: macOS (la riproduzione è probabile anche su altre piattaforme che eseguono Node 25)
Riproduzione (solo Node)
Riproduzione minima nel repo
Verifica della versione di Node
- Node 25.3.0: fallisce
- Node 22.22.0 (Homebrew
node@22): fallisce - Node 24: non ancora installato qui; necessita di verifica
Note / ipotesi
tsxusa esbuild per trasformare TS/ESM.keepNamesdi esbuild emette un helper__namee avvolge le definizioni di funzione con__name(...).- L’arresto anomalo indica che
__nameesiste ma non è una funzione a runtime, il che implica che l’helper manca oppure è stato sovrascritto per questo modulo nel percorso del loader Node 25. - Problemi simili con l’helper
__namesono stati segnalati in altri consumer di esbuild quando l’helper manca o viene riscritto.
Cronologia della regressione
2871657e(2026-01-06): gli script sono passati da Bun a tsx per rendere Bun facoltativo.- Prima di allora (percorso Bun),
openclaw statusegateway:watchfunzionavano.
Soluzioni alternative
- Usa Bun per gli script di sviluppo (attuale revert temporaneo).
-
Usa Node + tsc watch, quindi esegui l’output compilato:
-
Confermato localmente:
pnpm exec tsc -p tsconfig.json+node openclaw.mjs statusfunziona su Node 25. -
Disabilita
keepNamesdi esbuild nel loader TS, se possibile (questo evita l’inserimento dell’helper__name); al momento tsx non espone questa opzione. -
Prova Node LTS (22/24) con
tsxper vedere se il problema è specifico di Node 25.
Riferimenti
- https://opennext.js.org/cloudflare/howtos/keep_names
- https://esbuild.github.io/api/#keep-names
- https://github.com/evanw/esbuild/issues/1031
Passi successivi
- Riprodurre su Node 22/24 per confermare la regressione di Node 25.
- Testare
tsxnightly o bloccare a una versione precedente se esiste una regressione nota. - Se si riproduce su Node LTS, inviare upstream una riproduzione minima con lo stack trace
__name.