Збій Node + tsx “__name is not a function”
Підсумок
Запуск OpenClaw через Node зtsx завершується помилкою під час старту:
tsx (коміт 2871657e, 2026-01-06). Той самий шлях runtime працював із Bun.
Середовище
- Node: v25.x (спостерігалося на v25.3.0)
- tsx: 4.21.0
- OS: macOS (відтворення також імовірне на інших платформах, де запускається Node 25)
Відтворення (лише Node)
Мінімальне відтворення в репозиторії
Перевірка версії Node
- Node 25.3.0: збій
- Node 22.22.0 (Homebrew
node@22): збій - Node 24: тут ще не встановлено; потребує перевірки
Нотатки / гіпотеза
tsxвикористовує esbuild для перетворення TS/ESM.keepNamesв esbuild генерує допоміжну функцію__nameі обгортає визначення функцій у__name(...).- Збій вказує, що
__nameіснує, але не є функцією під час runtime, що означає, що допоміжна функція відсутня або перезаписана для цього модуля в шляху loader Node 25. - Подібні проблеми з допоміжною функцією
__nameуже повідомлялися в інших споживачах esbuild, коли ця допоміжна функція відсутня або переписана.
Історія регресії
2871657e(2026-01-06): скрипти змінено з Bun на tsx, щоб зробити Bun необов’язковим.- До цього (шлях Bun)
openclaw statusіgateway:watchпрацювали.
Способи обходу
- Використовувати Bun для dev-скриптів (поточне тимчасове повернення).
-
Використовувати Node + tsc watch, а потім запускати скомпільований вивід:
-
Локально підтверджено:
pnpm exec tsc -p tsconfig.json+node openclaw.mjs statusпрацює на Node 25. -
Вимкнути
keepNamesesbuild у TS loader, якщо це можливо (це запобігає вставленню допоміжної функції__name); наразі tsx цього не надає. -
Перевірити Node LTS (22/24) з
tsx, щоб з’ясувати, чи проблема є специфічною для Node 25.
Посилання
- https://opennext.js.org/cloudflare/howtos/keep_names
- https://esbuild.github.io/api/#keep-names
- https://github.com/evanw/esbuild/issues/1031
Наступні кроки
- Відтворити на Node 22/24, щоб підтвердити регресію Node 25.
- Перевірити
tsxnightly або закріпити раннішу версію, якщо існує відома регресія. - Якщо відтворюється на Node LTS, подати мінімальний приклад відтворення upstream зі stack trace
__name.