Debug 导读

Node + tsx 启动崩溃:__name is not a function

用 tsx 替代 Bun 后,Node 25 下启动 OpenClaw 报 __name 不是函数。先跑最小复现脚本确认环境,问题出在 tsx 4.21.0 与 Node 25 的兼容性,与代码逻辑无关。

先讲这一页到底在解决什么

Node + tsx 启动崩溃:__name is not a function

用 tsx 替代 Bun 后,Node 25 下启动 OpenClaw 报 __name 不是函数。先跑最小复现脚本确认环境,问题出在 tsx 4.21.0 与 Node 25 的兼容性,与代码逻辑无关。

原文共 12 节,先看 Start Here 路径:/debug/node-issue 查看官方原文

第一站

💥 先看现象:它不是慢,是直接倒了

错误点很明确:`createSubsystemLogger` 里撞上了 `__name is not a function`。

摘要

启动 CLI 时,函数名辅助器出了事。

环境

Node 25、tsx 4.21.0、macOS 都在表里。

关键线索

问题是从 Bun 切到 tsx 之后开始的。

第二站

🔁 复现步骤像一条最短回家路

这页给的命令很少,但每条都指向同一个目的:把问题稳定打出来。

node --import tsx src/entry.ts status

像直接拿 Node 拉起入口,看它当场会不会摔。

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

像拿更小的沙盘做最短复现。

Node 24 / 22

像在不同脚底下试鞋,看看是不是只有某一双鞋不对。

第三站

🧰 绕路方案,是“先把车开走”,不是把车修好

官方给的 workaround 很务实:先用 Bun,或者先编译再跑。

Bun 回退

像把车换回上一辆能跑的。

`tsc` + `node`

像先把零件烤好,再用普通发动机启动。

一句话

这页不是教你修 esbuild,而是教你先不被它卡住。