MacOS执行npm install -g surge安装Surge报EACCES权限错误如何解决
问题成因
报错核心是npm默认的全局安装目录为/usr/local/lib/node_modules,属于系统级受保护目录。MacOS即使登录的是管理员账号,普通终端操作默认也不持有该目录的写入权限,属于Unix系系统的常规权限隔离机制,和账号本身是否为管理员无直接关联。
推荐解决方案(无后续权限隐患)
不要直接用sudo强制覆盖目录权限安装,该操作会导致后续全局包调用、升级时反复触发权限问题,最优方案是将npm全局安装路径修改到当前用户的个人目录下,操作步骤如下:
- 在个人用户目录下创建专属的npm全局包存储文件夹:
mkdir ~/.npm-global
- 修改npm配置,将新创建的目录设为默认全局安装路径:
npm config set prefix '~/.npm-global'
- 将新路径下的可执行文件目录加入系统环境变量:
- MacOS Monterey默认使用zsh终端,编辑
~/.zshrc文件;如果自行切换为bash终端,编辑~/.bash_profile - 在配置文件末尾添加如下行:
export PATH=~/.npm-global/bin:$PATH - MacOS Monterey默认使用zsh终端,编辑
- 让环境变量配置立即生效:
- zsh终端执行:
source ~/.zshrc - bash终端执行:
source ~/.bash_profile
- zsh终端执行:
- 重新执行Surge安装命令即可:
npm install -g surge
临时快速方案(不推荐长期使用)
如果仅需单次临时安装,可以在安装命令前加sudo临时获取最高权限执行:
sudo npm install -g surge
执行后终端会提示输入当前账号的开机密码,输入过程中终端不会显示输入内容,正常输入完成后按回车即可。该方案会让全局node_modules目录的权限归属root用户,后续安装、升级其他全局npm包时大概率会再次触发同类权限报错。
内容的提问来源于stack exchange,提问作者mushroom_clouds
相关产品推荐
相关产品推荐

