Diagnostics
Сбой Node + tsx
Сбой Node + tsx «__name is not a function»
Сводка
Запуск OpenClaw через Node с tsx завершается ошибкой при старте:
[openclaw] Failed to start CLI: TypeError: __name is not a function at createSubsystemLogger (.../src/logging/subsystem.ts:203:25) at .../src/agents/auth-profiles/constants.ts:25:20Это началось после переключения dev-скриптов с Bun на tsx (коммит 2871657e, 2026-01-06). Тот же путь выполнения работал с Bun.
Окружение
- Node: v25.x (наблюдалось на v25.3.0)
- tsx: 4.21.0
- ОС: macOS (воспроизведение также вероятно на других платформах, где работает Node 25)
Воспроизведение (только Node)
# in repo rootnode --versionpnpm installnode --import tsx src/entry.ts statusМинимальное воспроизведение в репозитории
node --import tsx scripts/repro/tsx-name-repro.tsПроверка версии Node
- Node 25.3.0: ошибка
- Node 22.22.0 (Homebrew
node@22): ошибка - Node 24: здесь пока не установлен; требуется проверка
Заметки / гипотеза
tsxиспользует esbuild для преобразования TS/ESM.keepNamesв esbuild генерирует вспомогательную функцию__nameи оборачивает определения функций в__name(...).- Сбой указывает, что
__nameсуществует, но во время выполнения не является функцией; это подразумевает, что вспомогательная функция отсутствует или перезаписана для этого модуля в пути загрузчика Node 25. - Похожие проблемы со вспомогательной функцией
__nameотмечались у других потребителей esbuild, когда вспомогательная функция отсутствовала или переписывалась.
История регрессии
2871657e(2026-01-06): скрипты изменены с Bun на tsx, чтобы сделать Bun необязательным.- До этого (путь Bun)
openclaw statusиgateway:watchработали.
Обходные пути
-
Использовать Bun для dev-скриптов (текущий временный откат).
-
Использовать
tsgoдля проверки типов репозитория, затем запускать собранный вывод:bash pnpm tsgonode openclaw.mjs status -
Историческая заметка:
tscиспользовался здесь при отладке этой проблемы Node/tsx, но сейчас lanes проверки типов репозитория используютtsgo. -
Отключить esbuild keepNames в загрузчике TS, если возможно (это предотвращает вставку вспомогательной функции
__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.
- Проверить ночную сборку
tsxили закрепить более раннюю версию, если существует известная регрессия. - Если воспроизводится на Node LTS, отправить минимальный пример воспроизведения upstream со стеком вызовов
__name.
Связанные материалы
Was this useful?