mac npm全局安装报eacces错误是因默认路径/usr/local/lib/node_modules受系统保护,普通用户无写权限;应将npm prefix设为~/.npm-global并配置path,或改用nvm管理node。

Mac上执行npm install -g安装全局依赖时提示EACCES错误,是因为npm默认把包往/usr/local/lib/node_modules这类系统保护目录写,而你的普通用户账户没有写权限——这不是npm坏了,是macOS在认真履行Unix安全机制。
先确认问题确实存在
别急着改配置,用三行命令快速坐实根源:运行npm config get prefix,如果输出是/usr/local,就基本锁定问题;再执行ls -la $(npm config get prefix)/lib/node_modules,若提示Permission denied,说明目录当前不可写;最后试装一个轻量包:npm install -g serve,报EACCES就不用再怀疑了。
推荐方案:把npm全局路径移到你完全可控的用户目录
这是最稳妥、无需root权限、不破坏系统安全机制的做法。所有操作都在你自己的主目录里完成:
第一步:新建专属目录mkdir -p ~/.npm-global
第二步:告诉npm使用它npm config set prefix '~/.npm-global'
第三步:让终端能找到新装的命令
打开~/.zshrc(macOS Catalina及之后默认shell),在文件末尾添加:export PATH="$HOME/.npm-global/bin:$PATH"
【注意:如果你用的是bash,请改~/.bash_profile,不是~/.zshrc】
第四步:立即生效source ~/.zshrc
清理旧污染(如有)
方法一:检查缓存归属
运行ls -la ~/.npm,若owner显示为root,执行:sudo chown -R $(whoami) ~/.npm
方法二:同步修复其他残留目录
同样检查~/.npminstall_tarball和~/.cache/npm,有root所属就一并修复:sudo chown -R $(whoami) ~/.npminstall_tarball ~/.cache/npm
方法三:重装已用sudo装过的全局包
先卸载:sudo npm uninstall -g xxx→再重装:npm install -g xxx
更优长期选择:用nvm管理Node.js
如果你还没固定Node版本,直接上nvm是一劳永逸的解法。nvm安装的每个Node版本都自带独立全局路径(如~/.nvm/versions/node/v20.15.0/lib/node_modules),npm install -g自动落在用户目录,天然避开权限问题。还能随时切换Node版本,适合多项目协作,安装后开箱即用,不用额外配PATH。











