Diagnostics

Node + tsx-crash

Crash van Node + tsx: "__name is geen functie"

Status

Opgelost. Deze crash is niet reproduceerbaar met de huidige tsx-versie die in package.json is vastgezet (4.22.3), noch met de huidige Node-releases. Deze informatie blijft hier staan voor het geval een toekomstige upgrade van tsx/esbuild het probleem opnieuw introduceert.

Oorspronkelijk symptoom

Het uitvoeren van OpenClaw-ontwikkelscripts via tsx mislukte bij het opstarten met:

text
[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)

Regelnummers zijn weggelaten; beide bestanden zijn sinds de oorspronkelijke crash gewijzigd en de specifieke regels komen niet meer overeen.

Dit trad op nadat ontwikkelscripts waren overgeschakeld van Bun naar tsx (2871657e, 2026-01-06) om Bun optioneel te maken. Het equivalente pad op basis van Bun crashte niet. Het probleem werd oorspronkelijk waargenomen met Node v25.3.0 op macOS; andere platforms waarop Node 25 wordt uitgevoerd, werden waarschijnlijk ook als getroffen beschouwd.

Oorzaak

tsx transformeert TS/ESM via esbuild, waarbij keepNames: true vast is ingesteld in de transformatieopties. Door die instelling laat esbuild benoemde functie- en klassedeclaraties omhullen door een aanroep van een __name-hulpfunctie, zodat fn.name behouden blijft na minificatie en bundeling. De crash betekent dat de hulpfunctie ontbrak of werd overschaduwd op de aanroeplocatie voor die module in de getroffen combinatie van tsx en Node, waardoor __name(...) een fout genereerde in plaats van de omhulde waarde te retourneren.

Huidige reproductiecontrole

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

Minimale geïsoleerde reproductie (laadt alleen de module uit de oorspronkelijke stacktrace):

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

Beide opdrachten worden momenteel zonder fouten afgesloten. Als een van beide opnieuw de fout __name is not a function genereert, leg dan de exacte Node-versie, de tsx-versie (node_modules/tsx/package.json) en de volledige stacktrace vast voordat je het probleem upstream meldt.

Tijdelijke oplossingen (als de crash terugkeert)

  • Voer ontwikkelscripts uit met Bun in plaats van node --import tsx.

  • Voer pnpm tsgo uit voor typecontrole en voer vervolgens de gebouwde uitvoer uit in plaats van de broncode via tsx:

    bash
    pnpm tsgonode openclaw.mjs status
  • Probeer een andere tsx-versie (pnpm add -D tsx@<version> is een wijziging van een afhankelijkheid en vereist volgens het repositorybeleid goedkeuring) om via bisectie vast te stellen of de meegeleverde esbuild-versie de bug opnieuw heeft geïntroduceerd.

  • Test met een andere hoofd- of subversie van Node om te bepalen of de fout versiespecifiek is.

Verwijzingen

Gerelateerd

Was this useful?
On this page

On this page