Diagnostics

Node- + tsx-Absturz

Absturz von Node + tsx mit „__name is not a function“

Status

Behoben. Dieser Absturz lässt sich weder mit der aktuellen, in package.json fixierten tsx-Version (4.22.3) noch mit aktuellen Node-Versionen reproduzieren. Diese Seite bleibt für den Fall erhalten, dass ein künftiges Upgrade von tsx/esbuild den Fehler erneut verursacht.

Ursprüngliches Symptom

Beim Ausführen der OpenClaw-Entwicklungsskripte über tsx trat beim Start folgender Fehler auf:

text
[openclaw] CLI konnte nicht gestartet werden: TypeError: __name is not a function    bei createSubsystemLogger (src/logging/subsystem.ts)    bei <caller> (src/agents/auth-profiles/constants.ts)

Die Zeilennummern wurden weggelassen; beide Dateien wurden seit dem ursprünglichen Absturz geändert, sodass die konkreten Zeilen nicht mehr übereinstimmen.

Der Fehler trat auf, nachdem die Entwicklungsskripte von Bun auf tsx (2871657e, 2026-01-06) umgestellt worden waren, um Bun optional zu machen. Beim entsprechenden Bun-basierten Pfad trat kein Absturz auf. Ursprünglich wurde der Fehler mit Node v25.3.0 unter macOS beobachtet; es wurde davon ausgegangen, dass wahrscheinlich auch andere Plattformen betroffen waren, auf denen Node 25 ausgeführt wurde.

Ursache

tsx transformiert TS/ESM über esbuild, wobei keepNames: true in den Transformationsoptionen fest codiert ist. Diese Einstellung bewirkt, dass esbuild benannte Funktions-/Klassendeklarationen in einen Aufruf eines __name-Helpers einschließt, damit fn.name die Minifizierung und Bündelung übersteht. Der Absturz bedeutet, dass der Helper an der Aufrufstelle dieses Moduls in der betroffenen Kombination aus tsx und Node fehlte oder überschattet wurde, sodass __name(...) eine Ausnahme auslöste, anstatt den eingeschlossenen Wert zurückzugeben.

Aktuelle Reproduktionsprüfung

bash
node --versionpnpm installnode --import tsx src/entry.ts status

Minimale isolierte Reproduktion (lädt nur das Modul aus dem ursprünglichen Stacktrace):

bash
node --import tsx scripts/repro/tsx-name-repro.ts

Beide Befehle werden derzeit fehlerfrei beendet. Falls einer davon erneut __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 den Fehler im Upstream-Projekt melden.

Problemumgehungen (falls der Absturz erneut auftritt)

  • Führen Sie Entwicklungsskripte mit Bun statt mit node --import tsx aus.

  • Führen Sie pnpm tsgo zur Typprüfung aus und führen Sie anschließend die erstellte Ausgabe statt des Quellcodes über tsx aus:

    bash
    pnpm tsgonode openclaw.mjs status
  • Probieren Sie eine andere tsx-Version aus (pnpm add -D tsx@<version> ist eine Änderung der Abhängigkeiten und erfordert gemäß den Repository-Richtlinien eine Genehmigung), um durch Bisektion zu ermitteln, ob die darin enthaltene esbuild-Version den Fehler erneut verursacht hat.

  • Testen Sie mit einer anderen Haupt-/Nebenversion von Node, um festzustellen, ob der Fehler versionsspezifisch ist.

Referenzen

Verwandte Themen

Was this useful?
On this page

On this page