---
read_when:
    - Исследование сбоя загрузчика tsx/esbuild с упоминанием отсутствующего вспомогательного метода __name
summary: Исторический сбой Node + tsx «__name is not a function» и его причина
title: Сбой Node + tsx
x-i18n:
    generated_at: "2026-07-13T19:45:29Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 24
    provider: openai
    source_hash: 97d2f62d24860cee65753027ba84c14c8d4ffb910ee17bb0032cf0409c427589
    source_path: debug/node-issue.md
    workflow: 16
---

# Сбой Node + tsx «\_\_name is not a function»

## Статус

Устранено. Этот сбой не воспроизводится на текущей версии `tsx`, зафиксированной в
`package.json` (`4.22.3`), или в текущих выпусках Node. Эта информация сохранена на случай, если
будущее обновление `tsx`/esbuild вновь вызовет проблему.

## Исходный симптом

Запуск сценариев разработки OpenClaw через `tsx` завершался ошибкой при запуске:

```text
[openclaw] Не удалось запустить CLI: TypeError: __name не является функцией
    в createSubsystemLogger (src/logging/subsystem.ts)
    в <caller> (src/agents/auth-profiles/constants.ts)
```

Номера строк опущены: оба файла изменились с момента первоначального сбоя,
и конкретные строки больше не совпадают.

Проблема появилась после того, как сценарии разработки перешли с Bun на `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(...)` выдавала исключение вместо возврата обёрнутого значения.

## Текущая проверка воспроизведения

```bash
node --version
pnpm install
node --import tsx src/entry.ts status
```

Минимальный изолированный пример воспроизведения (загружает только модуль из исходной трассировки стека):

```bash
node --import tsx scripts/repro/tsx-name-repro.ts
```

Обе команды сейчас завершаются без ошибок. Если какая-либо из них снова выдаст `__name is not a
function`, перед отправкой отчёта в вышестоящий проект зафиксируйте точную версию Node, версию `tsx`
(`node_modules/tsx/package.json`) и полную трассировку стека.

## Обходные решения (если сбой вернётся)

- Запускайте сценарии разработки с Bun вместо `node --import tsx`.
- Запустите `pnpm tsgo` для проверки типов, а затем запускайте собранный результат вместо
  исходного кода через `tsx`:

  ```bash
  pnpm tsgo
  node openclaw.mjs status
  ```

- Попробуйте другую версию `tsx` (`pnpm add -D tsx@<version>` является изменением зависимости
  и требует одобрения согласно политике репозитория), чтобы методом бисекции определить, не вернула ли
  ошибку включённая в неё версия esbuild.
- Проверьте работу с другой основной или дополнительной версией Node, чтобы выяснить,
  зависит ли сбой от версии.

## Ссылки

- [https://esbuild.github.io/api/#keep-names](https://esbuild.github.io/api/#keep-names)
- [https://github.com/evanw/esbuild/issues/1031](https://github.com/evanw/esbuild/issues/1031)

## См. также

- [Установка Node.js](/ru/install/node)
- [Устранение неполадок Gateway](/ru/gateway/troubleshooting)
