admin@iZnihc21hmzdklZ:~$ npm install -g openclaw@latest
npm error code ENOTEMPTY
npm error syscall rename
npm error path /home/admin/.npm-global/lib/node_modules/openclaw
npm error dest /home/admin/.npm-global/lib/node_modules/.openclaw-WQfyuPKF
npm error errno -39
npm error ENOTEMPTY: directory not empty, rename '/home/admin/.npm-global/lib/node_modules/openclaw' -> '/home/admin/.npm-global/lib/node_modules/.openclaw-WQfyuPKF'
npm error A complete log of this run can be found in: /home/admin/.npm/_logs/2026-02-03T15_42_24_977Z-debug-0.log
我问Gemini这是怎么回事
TL;DR: 这是一个典型的“安装残留”冲突。npm 在更新 openclaw 时,试图重命名旧文件夹进行备份,但由于该目录内有残留文件或进程占用,导致操作失败。
为什么会报 ENOTEMPTY 错误?
简单来说,npm 想要执行一个“先搬走、再安装”的动作,但搬运的过程中发现目标位置不干净或者原文件夹被锁死:
- 残留文件冲突: 之前的安装可能意外中断,留下了一些“僵尸文件”。
- 权限不一致: 虽然你现在使用了
.npm-global,但如果该目录下某些文件是之前用sudo创建的,普通用户模式下的 npm 无法移动它们。 - 进程占用: 如果
openclaw正在后台运行,Linux 可能会锁定该目录,导致重命名失败。
解决方案
请按照以下顺序尝试,通常第一步就能解决:
1. 强行删除残留目录(最有效)
既然自动更新失败,我们手动清理掉旧的包,然后再重新安装:
rm -rf /home/admin/.npm-global/lib/node_modules/openclaw
如果提示权限不足,请在前面加上 sudo:**sudo rm -rf ...
2. 清理 npm 缓存
有时候缓存索引会导致 npm 认为目录结构异常:
npm cache clean --force
3. 重新执行安装
清理完毕后,再次尝试安装:
npm install -g openclaw@latest
进阶检查:是否还有残留的临时文件夹?
从你的报错信息看,npm 曾尝试重命名为 .openclaw-WQfyuPKF。你可以检查并清理掉这些以点开头的临时文件夹:
ls -la /home/admin/.npm-global/lib/node_modules/
如果看到很多 .openclaw-xxxx 之类的目录,建议全部删掉,保持 node_modules 目录的整洁。
验证安装结果
安装成功后,你可以运行以下命令确认版本和路径是否正确:
openclaw -v
which openclaw
如果还是报错,请检查是否有 openclaw 的进程正在后台运行。你可以用 ps -ef | grep openclaw 查看,并用 kill 命令关闭它。