Diagnostics
Node- + tsx-Absturz
Absturz bei Node + tsx: „__name is not a function“
Status
Behoben. Dieser Absturz lässt sich weder mit der aktuellen, in
package.json festgelegten tsx-Version (4.22.3) noch mit aktuellen Node-Versionen reproduzieren. Diese Seite bleibt für den Fall erhalten, dass ein
zukünftiges Upgrade von tsx/esbuild das Problem erneut verursacht.
Ursprüngliches Symptom
Beim Ausführen der OpenClaw-Entwicklungsskripte über tsx trat beim Start folgender Fehler auf:
[openclaw] Failed to start CLI: TypeError: __name is not a function at createSubsystemLogger (src/logging/subsystem.ts) at <caller> (src/agents/auth-profiles/constants.ts)Die Zeilennummern wurden weggelassen; beide Dateien wurden seit dem ursprünglichen Absturz geändert und die betreffenden Zeilen stimmen nicht mehr überein.
Das Problem trat auf, nachdem die Entwicklungsskripte von Bun auf tsx umgestellt worden waren (2871657e, 2026-01-06), um Bun optional zu machen. Beim entsprechenden Bun-basierten Ausführungspfad trat kein Absturz auf. Ursprünglich wurde das Problem unter Node v25.3.0 auf macOS beobachtet; auch andere Plattformen, auf denen Node 25 ausgeführt wird, galten als wahrscheinlich betroffen.
Ursache
tsx transformiert TS/ESM über esbuild, wobei keepNames: true in den Transformationsoptionen fest vorgegeben ist. Diese Einstellung bewirkt, dass esbuild benannte Funktions- und Klassendeklarationen in einen Aufruf des Hilfsprogramms __name einschließt, damit fn.name bei der Minifizierung und Bündelung erhalten bleibt. Der Absturz bedeutet, dass das Hilfsprogramm an der Aufrufstelle dieses Moduls in der betroffenen Kombination aus tsx und Node fehlte oder überschattet wurde. Daher löste __name(...) einen Fehler aus, anstatt den eingeschlossenen Wert zurückzugeben.
Aktuelle Reproduktionsprüfung
node --versionpnpm installnode --import tsx src/entry.ts statusMinimale isolierte Reproduktion (lädt nur das Modul aus dem ursprünglichen Stacktrace):
node --import tsx scripts/repro/tsx-name-repro.tsBeide Befehle werden derzeit ohne Fehler beendet. Falls einer der Befehle erneut den Fehler __name is not a function auslöst, erfassen Sie die genaue Node-Version, die tsx-Version (node_modules/tsx/package.json) und den vollständigen Stacktrace, bevor Sie das Problem im Upstream-Projekt melden.
Problemumgehungen (falls der Absturz erneut auftritt)
-
Führen Sie Entwicklungsskripte mit Bun statt mit
node --import tsxaus. -
Führen Sie
pnpm tsgozur Typprüfung aus und verwenden Sie anschließend die erstellte Ausgabe, anstatt den Quellcode übertsxauszuführen:bash pnpm tsgonode openclaw.mjs status -
Probieren Sie eine andere
tsx-Version aus (pnpm add -D tsx@<version>ist eine Abhängigkeitsänderung und erfordert gemäß den Repository-Richtlinien eine Genehmigung), um durch schrittweises Eingrenzen zu ermitteln, ob die darin enthaltene esbuild-Version den Fehler erneut verursacht hat. -
Testen Sie eine andere Haupt- oder Nebenversion von Node, um festzustellen, ob der Fehler versionsspezifisch ist.