Awaria Node + tsx “__name is not a function”
Podsumowanie
Uruchamianie OpenClaw przez Node ztsx kończy się niepowodzeniem przy starcie z błędem:
tsx (commit 2871657e, 2026-01-06). Ta sama ścieżka środowiska uruchomieniowego działała z Bun.
Środowisko
- Node: v25.x (zaobserwowano na v25.3.0)
- tsx: 4.21.0
- OS: macOS (odtworzenie jest prawdopodobne także na innych platformach uruchamiających Node 25)
Odtworzenie (tylko Node)
Minimalne odtworzenie w repozytorium
Sprawdzenie wersji Node
- Node 25.3.0: kończy się błędem
- Node 22.22.0 (Homebrew
node@22): kończy się błędem - Node 24: jeszcze nie zainstalowano tutaj; wymaga weryfikacji
Uwagi / hipoteza
tsxużywa esbuild do transformacji TS/ESM.keepNamesw esbuild emituje helper__namei opakowuje definicje funkcji przez__name(...).- Awaria wskazuje, że
__nameistnieje, ale nie jest funkcją w czasie działania, co oznacza, że helper dla tego modułu jest brakujący albo nadpisany w ścieżce loadera Node 25. - Podobne problemy z helperem
__namebyły zgłaszane u innych użytkowników esbuild, gdy helper jest brakujący lub przepisany.
Historia regresji
2871657e(2026-01-06): skrypty zmieniono z Bun na tsx, aby Bun był opcjonalny.- Wcześniej (ścieżka Bun)
openclaw statusigateway:watchdziałały.
Obejścia
- Używaj Bun do skryptów deweloperskich (obecne tymczasowe cofnięcie).
-
Używaj Node + tsc watch, a następnie uruchamiaj skompilowane wyjście:
-
Potwierdzono lokalnie:
pnpm exec tsc -p tsconfig.json+node openclaw.mjs statusdziała na Node 25. -
Wyłącz
keepNamesesbuild w loaderze TS, jeśli to możliwe (zapobiega wstawianiu helpera__name);tsxobecnie tego nie udostępnia. -
Przetestuj Node LTS (22/24) z
tsx, aby sprawdzić, czy problem jest specyficzny dla Node 25.
Odwołania
- https://opennext.js.org/cloudflare/howtos/keep_names
- https://esbuild.github.io/api/#keep-names
- https://github.com/evanw/esbuild/issues/1031
Następne kroki
- Odtwórz problem na Node 22/24, aby potwierdzić regresję Node 25.
- Przetestuj
tsxnightly albo przypnij wcześniejszą wersję, jeśli istnieje znana regresja. - Jeśli problem odtwarza się na Node LTS, zgłoś minimalne odtworzenie upstream z tracebackiem
__name.