Сбой Node + tsx «__name is not a function»
Статус
Устранено. Этот сбой не воспроизводится на текущей версииtsx, зафиксированной в
package.json (4.22.3), или в текущих выпусках Node. Эта информация сохранена на случай, если
будущее обновление tsx/esbuild вновь вызовет проблему.
Исходный симптом
Запуск сценариев разработки OpenClaw черезtsx завершался ошибкой при запуске:
tsx (2871657e,
2026-01-06), чтобы сделать Bun необязательным. Эквивалентный путь на основе Bun не приводил к сбою.
Изначально проблема наблюдалась в Node v25.3.0 на macOS; предполагалось, что она также
может затронуть другие платформы, использующие Node 25.
Причина
tsx преобразует TS/ESM через esbuild с жёстко заданным параметром keepNames: true
в настройках преобразования. Этот параметр заставляет esbuild оборачивать именованные объявления
функций и классов в вызов вспомогательной функции __name, чтобы fn.name
сохранялось при минификации и сборке. Сбой означает, что в месте вызова этого модуля
при затронутом сочетании tsx/Node вспомогательная функция отсутствовала или была
перекрыта, поэтому __name(...) выдавала исключение вместо возврата обёрнутого значения.
Текущая проверка воспроизведения
__name is not a function, перед отправкой отчёта в вышестоящий проект зафиксируйте точную версию Node, версию tsx
(node_modules/tsx/package.json) и полную трассировку стека.
Обходные решения (если сбой вернётся)
-
Запускайте сценарии разработки с Bun вместо
node --import tsx. -
Запустите
pnpm tsgoдля проверки типов, а затем запускайте собранный результат вместо исходного кода черезtsx: -
Попробуйте другую версию
tsx(pnpm add -D tsx@<version>является изменением зависимости и требует одобрения согласно политике репозитория), чтобы методом бисекции определить, не вернула ли ошибку включённая в неё версия esbuild. - Проверьте работу с другой основной или дополнительной версией Node, чтобы выяснить, зависит ли сбой от версии.