Absturz „__name is not a function“ mit Node + tsx
Zusammenfassung
Das Ausführen von OpenClaw über Node mittsx schlägt beim Start fehl mit:
tsx (Commit 2871657e, 2026-01-06). Derselbe Laufzeitpfad funktionierte mit Bun.
Umgebung
- Node: v25.x (beobachtet unter v25.3.0)
- tsx: 4.21.0
- Betriebssystem: macOS (Reproduktion wahrscheinlich auch auf anderen Plattformen, auf denen Node 25 läuft)
Reproduktion (nur Node)
Minimale Reproduktion im Repo
Prüfung der Node-Version
- Node 25.3.0: schlägt fehl
- Node 22.22.0 (Homebrew
node@22): schlägt fehl - Node 24: hier noch nicht installiert; muss noch verifiziert werden
Hinweise / Hypothese
tsxverwendet esbuild, um TS/ESM zu transformieren.keepNamesvon esbuild erzeugt einen__name-Helper und umschließt Funktionsdefinitionen mit__name(...).- Der Absturz zeigt, dass
__nameexistiert, zur Laufzeit aber keine Funktion ist. Das deutet darauf hin, dass der Helper in diesem Modulpfad des Node-25-Loaders fehlt oder überschrieben wird. - Ähnliche Probleme mit dem
__name-Helper wurden auch bei anderen esbuild-Nutzern gemeldet, wenn der Helper fehlt oder umgeschrieben wird.
Regressionsverlauf
2871657e(2026-01-06): Skripte wurden von Bun auf tsx umgestellt, um Bun optional zu machen.- Davor (Bun-Pfad) funktionierten
openclaw statusundgateway:watch.
Workarounds
- Bun für Dev-Skripte verwenden (aktueller temporärer Revert).
-
Node + tsc watch verwenden und dann die kompilierte Ausgabe ausführen:
-
Lokal bestätigt:
pnpm exec tsc -p tsconfig.json+node openclaw.mjs statusfunktioniert unter Node 25. -
keepNamesvon esbuild im TS-Loader deaktivieren, wenn möglich (verhindert das Einfügen des__name-Helpers); tsx stellt dies derzeit nicht bereit. -
Node LTS (22/24) mit
tsxtesten, um zu sehen, ob das Problem Node-25-spezifisch ist.
Referenzen
- https://opennext.js.org/cloudflare/howtos/keep_names
- https://esbuild.github.io/api/#keep-names
- https://github.com/evanw/esbuild/issues/1031
Nächste Schritte
- Reproduktion unter Node 22/24, um die Regression in Node 25 zu bestätigen.
tsxnightly testen oder auf eine frühere Version pinnen, falls eine bekannte Regression existiert.- Wenn es sich auch unter Node LTS reproduzieren lässt, Upstream eine minimale Reproduktion mit dem
__name-Stack-Trace melden.