コンテンツにスキップ

Node.js + tsx で発生する "__name is not a function" クラッシュの解決策

開発中、ランタイムやツールセットを少し変更しただけで、昨日まで動いていたコードが突然動かなくなることがあります。特にビルドツールやローダーが内部で生成するヘルパー関数に起因するエラーは、自分の書いたコードに問題が見当たらないため、原因の特定に時間がかかりがちです。

Node.js 環境で TypeScript を実行するために tsx を導入した際、起動時に謎の TypeError に遭遇した場合は、ツール間の互換性が影響している可能性があります。

  • Node.js (v25.x または v22.x)
  • tsx (v4.21.0)
  • pnpm

tsx を使用した際に __name is not a function というエラーでクラッシュする場合、tsc でコンパイルした後に Node.js で直接実行する方法が最も確実な回避策です。以下の手順で 5 分以内に環境を復旧できます。

  1. TypeScript のビルドを実行し、ファイルの変更を監視します。

    Terminal window
    pnpm exec tsc --watch --preserveWatchOutput
  2. 別のターミナルウィンドウで、出力された JavaScript ファイルを Node.js で実行します。

    Terminal window
    node --watch openclaw.mjs status

この方法により、tsx の内部処理を経由せずにプログラムを安定して動作させることができます。

エラー内容: TypeError: __name is not a function

Section titled “エラー内容: TypeError: __name is not a function”

tsx を使用してアプリケーションを起動しようとすると、以下のようなスタックトレースが表示されてクラッシュする。

[openclaw] Failed to start CLI: TypeError: __name is not a function
at createSubsystemLogger (.../src/logging/subsystem.ts:203:25)

tsx は内部で esbuild を使用して TypeScript を変換します。esbuild の keepNames オプションは、関数名を保持するために __name というヘルパー関数を挿入しますが、Node.js 25 などの特定の環境では、このヘルパーが正しく認識されない、あるいは期待通りに機能しないことが原因です。

もしプロジェクトで許容できるなら、Node.js の代わりに Bun を使用してください。このエラーは Node.js + tsx の組み合わせで発生するため、Bun ランタイムでは発生しないことが確認されています。

解決策 2: Node.js と tsc を組み合わせる

Section titled “解決策 2: Node.js と tsc を組み合わせる”

前述の Quick Start の通り、tsx を介さずに tsc でビルドしたファイルを Node.js で実行します。

Terminal window
pnpm exec tsc -p tsconfig.json
node openclaw.mjs status

セットアップや環境構築でさらにサポートが必要な場合は、AI Setup Assistant をチェックしてください。

OpenClaw

OpenClaw Expert

まだ解決しませんか?

このページで解決しない場合は、OpenClaw Expertに直接質問してください。