简要总结
Node + tsx Crash
这页说明书在讲一个“名字不是朋友”的小麻烦。当我们用 Node 和 tsx 这两个工具来启动 OpenClaw 时,它们会吵架,然后 OpenClaw 就摔倒(崩溃)了,还喊“__name 不是个函数!”。这页就是告诉你为什么它们会吵架,以及我们怎么先让它们和好,让 OpenClaw 能重新站起来工作。如果你在用 Node 和 tsx 时遇到 OpenClaw 启动不了,可以看看这里。
五岁小孩版解释
我们想用 Node 和 tsx 这两个工具来运行 OpenClaw,但是一启动,它就“摔倒”了,还报告了一个错误说“__name 不是个函数”。这就像你叫一个朋友的名字,但他却变成了一块石头,没法回应你。这个麻烦是在我们把一个叫 Bun 的工具换成 tsx 之后开始的。
为什么会这样呢?
这主要是因为 tsx 在帮忙翻译代码时,用了一个叫 __name 的小帮手来记住函数的名字。但在某些情况下,这个小帮手可能走丢了,或者没有被正确地带到游戏里来,所以当代码想找它帮忙时,就找不到了,游戏就玩不下去了。
在什么情况下会遇到这个问题?
- 你正在使用 Node 的版本是 25.x(比如 v25.3.0)。
- 你正在使用 tsx 的版本是 4.21.0。
- 你的电脑系统可能是 macOS,但其他能运行 Node 25 的电脑也可能遇到。
那我们怎么试试看是不是真的遇到了这个问题呢? 你可以像下面这样,在存放 OpenClaw 代码的文件夹里,打开一个“命令窗口”输入命令来试试:
- 先检查工具:输入
node --version,看看 Node 是不是 25 版本。 - 准备玩具:输入
pnpm install,这就像把乐高积木都拿出来摆好。 - 试着启动:输入
node --import tsx src/entry.ts status,这就是试着启动 OpenClaw 看看状态。
如果它“摔倒”了并报错,那就说明遇到了我们说的麻烦。
别担心,我们有办法先绕过这个麻烦! 虽然 tsx 和 Node 25 现在配合不好,但我们可以用其他方法来玩:
- 换回原来的好朋友:暂时先不用 tsx,换回之前用的 Bun 工具来运行开发脚本。这是目前最简单的办法。
- 用另一个翻译官:我们可以先用
tsc这个工具来把代码翻译好,存起来,然后再让 Node 去运行翻译好的文件。- 打开一个命令窗口,输入:
pnpm exec tsc --watch --preserveWatchOutput。这就像让tsc在旁边一直看着,代码一变它就马上翻译。 - 再打开另一个命令窗口,输入:
node --watch openclaw.mjs status。这就像让 Node 去运行那个翻译好的文件,并且一直看着它。
- 打开一个命令窗口,输入:
- 试试其他版本的 Node:这个问题可能在 Node 25 上比较明显。你可以试试安装 Node 22 或 24 这些更稳定的版本,看看用它们配合 tsx 会不会好一些。
需要注意的事情:
- 这个麻烦是 tsx 和 Node(特别是 25 版本)之间的小矛盾,不是 OpenClaw 自己的错。
- 我们还在想办法彻底解决它,比如看看是不是只有 Node 25 会这样,或者告诉 tsx 和 esbuild 的开发者们。
- 在彻底解决之前,你可以先用上面“换回原来的好朋友”或者“用另一个翻译官”的办法来继续玩 OpenClaw。