---
read_when:
    - Дослідження аварійного завершення завантажувача tsx/esbuild, у якому згадується відсутній допоміжний модуль __name
summary: Історичний збій Node + tsx «__name не є функцією» та його причина
title: Збій Node + tsx
x-i18n:
    generated_at: "2026-07-12T13:14:51Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    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] Failed to start CLI: TypeError: __name is not a function
    at createSubsystemLogger (src/logging/subsystem.ts)
    at <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`, перед надсиланням звіту до upstream-проєкту збережіть точну версію 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](/uk/install/node)
- [Усунення несправностей Gateway](/uk/gateway/troubleshooting)
