macOS 上 npm 全局安装报 EACCES 错误是因默认路径 /usr/local/lib/node_modules 权限不足,正确解法是将全局路径重定向至用户目录(如 ~/npm-global),配置 prefix 并更新 PATH,全程无需 sudo。
macos 上 npm 全局安装报 eacces 错误,不是 npm 本身有问题,而是它默认往系统目录(/usr/local/lib/node_modules)写文件,而普通用户没权限。硬加 sudo 能装上,但容易导致命令找不到、包冲突、homebrew 异常甚至安全风险。真正靠谱的做法是把全局路径换到你自己的目录里,全程不用 sudo。
确认当前问题是否存在
先看看是不是真有权限问题:
- 运行
npm config get prefix,如果输出是/usr/local,大概率就是它了 - 再执行
ls -la $(npm config get prefix)/lib/node_modules,如果提示Permission denied,说明权限确实被拦住了 - 试装一个轻量包:
npm install -g serve,报EACCES就坐实了
重定向 npm 全局路径到用户目录
推荐用 ~/npm-global 这个位置,干净、可控、不碰系统目录:
- 创建目录:
mkdir -p ~/npm-global - 告诉 npm 用这个路径:
npm config set prefix '~/npm-global' - 把可执行文件目录加进系统路径:打开
~/.zshrc(macOS Catalina 及之后默认用 zsh),末尾加上export PATH="$HOME/npm-global/bin:$PATH" - 让新配置生效:
source ~/.zshrc
验证配置是否成功
别只看装没装上,重点检查三件事:
部署和使用军舰的 macOS Automator 自动化服务集合。包含 5 个实用工作流:PDF转JPG、PNG重命名并转JPG、图像拼接、解压RAR、顺序命名图像文件。一键安装所有服务到 ~/Library/Services/ 目录。使用场景:(1) "安装我的自动化服务",(2) "部署所有 Automato...
-
npm root -g输出应为/Users/你的用户名/npm-global/lib/node_modules -
npm bin -g输出应为/Users/你的用户名/npm-global/bin - 装完带命令行的包(比如
npm install -g http-server),直接敲http-server --version能运行,不报command not found
清理旧的 sudo 安装残留(可选但建议)
如果之前用 sudo npm install -g 装过东西,建议清理掉,避免混用:
- 列出旧全局包:
sudo ls /usr/local/lib/node_modules - 逐个卸载:
sudo npm uninstall -g 包名 - 重新用普通权限安装:
npm install -g 包名
不复杂但容易忽略

















