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 的兼容性,与代码逻辑无关。
第一站
💥 先看现象:它不是慢,是直接倒了
错误点很明确:`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,而是教你先不被它卡住。