执行所有npm相关操作均触发EACCES权限报错的解决求助
问题描述
执行任意npm相关操作(包含卸载npm本身)时均返回如下权限错误:
npm ERR! code EACCES npm ERR! syscall rename npm ERR! path /usr/local/bin/corepack npm ERR! dest /usr/local/bin/.corepack-0KY6b4OJ npm ERR! errno -13 npm ERR! Error: EACCES: permission denied, rename '/usr/local/bin/corepack' -> '/usr/local/bin/.corepack-0KY6b4OJ' npm ERR! [Error: EACCES: permission denied, rename '/usr/local/bin/corepack' -> '/usr/local/bin/.corepack-0KY6b4OJ'] { npm ERR! errno: -13, npm ERR! code: 'EACCES', npm ERR! syscall: 'rename', npm ERR! path: '/usr/local/bin/corepack', npm ERR! dest: '/usr/local/bin/.corepack-0KY6b4OJ' npm ERR! } npm ERR! npm ERR! The operation was rejected by your operating system. npm ERR! It is likely you do not have the permissions to access this file as the current user npm ERR! npm ERR! If you believe this might be a permissions issue, please double-check the npm ERR! permissions of the file and its containing directories, or try running npm ERR! the command again as root/Administrator.
此前npm可正常使用,距上次执行npm相关操作间隔约1年,已尝试如下方案均无效:
- 使用sudo提权执行npm命令
- 通过nvm管理Node版本
- 完全卸载Node.js后重装
排查解决步骤
这个报错的核心原因是/usr/local/bin路径下残留了旧版本全局安装的corepack文件,且文件/目录权限异常;就算安装了nvm,如果环境变量配置错误导致终端优先读取/usr/local下的旧Node相关二进制文件,依然会触发报错,按以下顺序操作即可修复:
- 先确认当前终端读取的npm路径
执行如下两条命令查看路径:
如果返回结果以which npm which corepack/usr/local/bin/开头,说明当前终端调用的是系统全局安装的旧版本Node,而非nvm管理的版本,属于环境变量配置错误。正常nvm管理的Node路径会以~/.nvm/versions/node/开头。 - 清理残留的异常corepack文件
执行命令删除/usr/local下损坏的corepack文件及临时残留文件:sudo rm -f /usr/local/bin/corepack sudo rm -f /usr/local/bin/.corepack-* - 修复目录权限
执行命令修正/usr/local/bin目录的属主为当前用户,避免后续全局安装命令出现权限问题:# 先执行whoami获取当前用户名 whoami # macOS系统执行,将<你的用户名>替换为上一步返回的结果 sudo chown -R <你的用户名>:admin /usr/local/bin # Linux系统执行,将<你的用户名>替换为上一步返回的结果 sudo chown -R <你的用户名>:<你的用户名> /usr/local/bin - 修复nvm环境变量配置
打开终端对应的配置文件:如果使用zsh终端编辑~/.zshrc,如果使用bash终端编辑~/.bashrc或~/.bash_profile,确认文件末尾存在如下nvm初始化配置,不存在就手动补上:
保存后执行export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"source <你编辑的配置文件路径>让配置生效,完全关闭终端后重新打开。 - 验证修复结果
重新执行which npm和which corepack,确认返回路径属于nvm目录后,任意执行npm命令验证是否恢复正常。
内容的提问来源于stack exchange,提问作者M Y
相关产品推荐
相关产品推荐

