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 wykonania działała z Bun.
Środowisko
- Node: v25.x (zaobserwowano na v25.3.0)
- tsx: 4.21.0
- OS: macOS (odtworzenie prawdopodobnie 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 jest tu zainstalowany; wymaga weryfikacji
Uwagi / hipoteza
tsxużywa esbuild do transformacji TS/ESM. OpcjakeepNamesw esbuild emituje helper__namei opakowuje definicje funkcji za pomocą__name(...).- Awaria wskazuje, że
__nameistnieje, ale w czasie działania nie jest funkcją, co sugeruje, że helper dla tego modułu jest nieobecny albo nadpisany w ścieżce loadera Node 25. - Podobne problemy z helperem
__namezgłaszano w innych narzędziach korzystających z esbuild, gdy helper jest nieobecny albo 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 (obecny tymczasowy powrót).
-
Użyj
tsgodo sprawdzania typów w repozytorium, a następnie uruchom zbudowane wyjście: -
Uwaga historyczna: podczas debugowania tego problemu Node/tsx używano tu
tsc, ale obecnie ścieżki sprawdzania typów w repozytorium korzystają ztsgo. -
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 dotyczy tylko Node 25.
Odniesienia
- 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ę w Node 25.
- Przetestuj
tsxnightly albo przypnij wcześniejszą wersję, jeśli istnieje znana regresja. - Jeśli problem odtwarza się na Node LTS, zgłoś minimalny przypadek odtworzeniowy upstream z trace stosu
__name.