Crash Node + tsx “__name is not a function”
Résumé
L’exécution d’OpenClaw via Node avectsx échoue au démarrage avec :
tsx (commit 2871657e, 2026-01-06). Le même chemin d’exécution fonctionnait avec Bun.
Environnement
- Node : v25.x (observé sur v25.3.0)
- tsx : 4.21.0
- OS : macOS (la reproduction est aussi probable sur d’autres plateformes qui exécutent Node 25)
Reproduction (Node uniquement)
Reproduction minimale dans le dépôt
Vérification de la version Node
- Node 25.3.0 : échoue
- Node 22.22.0 (Homebrew
node@22) : échoue - Node 24 : pas encore installé ici ; à vérifier
Notes / hypothèse
tsxutilise esbuild pour transformer TS/ESM.keepNamesd’esbuild émet un helper__nameet encapsule les définitions de fonction avec__name(...).- Le crash indique que
__nameexiste mais n’est pas une fonction à l’exécution, ce qui implique que le helper est manquant ou écrasé pour ce module dans le chemin du chargeur Node 25. - Des problèmes similaires avec le helper
__nameont été signalés dans d’autres consommateurs d’esbuild lorsque le helper est manquant ou réécrit.
Historique de régression
2871657e(2026-01-06) : les scripts sont passés de Bun à tsx pour rendre Bun facultatif.- Avant cela (chemin Bun),
openclaw statusetgateway:watchfonctionnaient.
Solutions de contournement
- Utiliser Bun pour les scripts de développement (retour temporaire actuel).
-
Utiliser Node + watch TSC, puis exécuter la sortie compilée :
-
Confirmé localement :
pnpm exec tsc -p tsconfig.json+node openclaw.mjs statusfonctionne sur Node 25. -
Désactiver
keepNamesd’esbuild dans le chargeur TS si possible (empêche l’insertion du helper__name) ; tsx n’expose actuellement pas cela. -
Tester Node LTS (22/24) avec
tsxpour voir si le problème est spécifique à Node 25.
Références
- https://opennext.js.org/cloudflare/howtos/keep_names
- https://esbuild.github.io/api/#keep-names
- https://github.com/evanw/esbuild/issues/1031
Étapes suivantes
- Reproduire sur Node 22/24 pour confirmer une régression de Node 25.
- Tester
tsxnightly ou l’épingler à une version antérieure si une régression connue existe. - Si le problème se reproduit sur Node LTS, déposer en amont une reproduction minimale avec la trace de pile
__name.