$cd ../troubleshooting/
High💻 Platform
Windows EACCES / EPERM — npm 无法写入 Program Files
// 在 Windows 上,未设置用户级 prefix 时运行 npm install -g openclaw 会尝试写入 C:\Program Files\nodejs\node_modules — 受保护目录。即使以提升权限 PowerShell 运行也会出现 EACCES、EPERM 或「operation not permitted」。解决方法是将全局包重定向到 %APPDATA%\npm,并确保该路径在 PATH 中优先于系统 Node。
diagnose.sh
🔍 这是您的问题吗?
?npm install -g openclaw 失败,EACCES/EPERM 指向 C:\Program Files\nodejs
?npm config get prefix 返回 C:\Program Files\nodejs(非 %APPDATA%\npm)
?where openclaw 显示多条路径或仅 Program Files\nodejs
npm_prefix.ps1
✅ 修复方法 1 — 将 npm prefix 设为 %APPDATA%\npm
修改 prefix 后无需管理员
# PowerShell — 设置用户级 prefix npm config set prefix "$env:APPDATA\npm" # 验证 npm config get prefix # 预期:C:\Users\<you>\AppData\Roaming\npm npm install -g openclaw
user_path.env
✅ 修复方法 2 — 更新用户 PATH(顺序很重要)
用户 PATH 条目必须在系统 Node 路径之前
# 添加到用户 PATH(设置 → 系统 → 关于 → 高级系统设置 → 环境变量)
# 用户变量 → Path → 新建:
%APPDATA%\npm
%APPDATA%\npm\node_modules\.bin
# 或 PowerShell(当前用户):
[Environment]::SetEnvironmentVariable(
"Path",
"$env:APPDATA\npm;$env:APPDATA\npm\node_modules\.bin;" + [Environment]::GetEnvironmentVariable("Path","User"),
"User"
)nvm_setup.ps1
✅ 修复方法 3 — 使用 nvm-windows 或 fnm(长期推荐)
版本管理器完全避开 Program Files
# nvm-windows (https://github.com/coreybutler/nvm-windows) nvm install lts nvm use lts npm config set prefix "$env:APPDATA\npm" npm install -g openclaw # fnm 替代(scoop/choco) fnm install --lts fnm use lts npm install -g openclaw
💡 专业技巧:切勿以管理员身份运行全局 npm
以「以管理员身份运行」全局安装会掩盖 prefix 问题,并在 Program Files 下创建第二份副本,覆盖用户安装。应先修复 prefix + PATH,再在无提升权限下安装。
🛡️ 预防清单
- • 每次重装 Node 后运行 npm config get prefix — 部分安装程序会重置
- • 将 %APPDATA%\npm 与 %APPDATA%\npm\node_modules\.bin 放在用户 PATH 最前
- • 优先使用 nvm-windows 或 fnm,Node 升级不触碰 Program Files 权限
- • 在 dotfile 笔记中记录 prefix — 企业镜像常在登录时还原 PATH
- • 用 where openclaw 验证 — 第一条命中应在 AppData 下,而非 Program Files
❓ 常见问题
Q1. 为什么 Windows 上 npm 会写入 Program Files?
官方 Node.js MSI 将 node.exe 与全局 node_modules 放在 C:\Program Files\nodejs。未设置 prefix 时 npm 默认使用该目录。UAC 保护 Program Files 免受非提升写入 — 普通用户因此遇到 EACCES/EPERM。
Q2. 将 npm prefix 改离 Program Files 安全吗?
安全 — 这是 Microsoft 推荐的每用户全局工具模式。npm 文档本身描述 Windows 下 prefix=%APPDATA%\npm。Node 仍在 Program Files;仅全局 CLI(openclaw、typescript 等)安装到用户目录。
Q3. 我已用管理员运行 npm 且「成功」— 还需要修复 1 吗?
可能装了两份 openclaw:Program Files(管理员)与 AppData(用户)。PATH 顺序决定运行哪份。在 cmd 运行 where openclaw — 若 Program Files 优先,卸载管理员副本并统一使用用户 prefix,避免升级时权限意外。
Q4. 修改 PATH 后需要重启吗?
关闭并重新打开 PowerShell、cmd 与 Windows Terminal — 现有会话缓存 PATH。VS Code / Cursor 集成终端也需完全重启窗口。在新终端中 openclaw --version 确认修复。
Q5. WSL 或 Git Bash 行为不同吗?
WSL 使用 Linux 路径 — 本指南针对原生 Windows npm。Git Bash 继承 Windows PATH 但有时错误展开 %APPDATA%;prefix 设置建议用 PowerShell。WSL 内请在发行版中用 Linux npm 安装 OpenClaw,勿共用 Windows node.exe。
Q6. 公司策略禁止编辑用户 PATH 怎么办?
请 IT 通过 GPO 添加 %APPDATA%\npm,或在用户目录安装 nvm-windows(无需管理员)。最后手段:用 npx 运行 OpenClaw 而不全局安装 — 启动较慢但无需写入 Program Files。