npm 不加 sudo 就报权限错误,怎么解决?
npm 全局安装要 sudo 是目录权限问题,根治方法是把 npm 全局目录改到用户家目录(npm config set prefix),或用 nvm 管理 Node。不要用 sudo 装包。本文给出完整修复步骤。
别用 sudo 装 npm 包——这会让 root 拥有你目录里的文件,越用越乱。正确做法是把全局安装目录改到你自己拥有的位置。
根治:把全局目录改到家目录
# 1. 建一个属于你自己的全局目录
mkdir ~/.npm-global
# 2. 让 npm 用它
npm config set prefix '~/.npm-global'
# 3. 把它的 bin 加进 PATH(写进 ~/.bashrc 或 ~/.zshrc)
export PATH=~/.npm-global/bin:$PATH
# 4. 重开终端或 source ~/.bashrc,之后全局安装不再需要 sudo
npm install -g typescript
善后:修复被 sudo 污染的文件
如果之前用 sudo 装过包,部分文件已被 root 拥有,会导致后续普通操作报 EACCES:
sudo chown -R $(whoami) ~/.npm
sudo chown -R $(whoami) ~/.npm-global
更省心的方案:用 nvm 管理 Node
用 nvm(Node Version Manager)安装的 Node,全局目录天然在家目录下,彻底不存在 sudo 问题,还能随时切换 Node 版本:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
nvm install --lts
Windows 对应工具是 nvm-windows 或 fnm。
为什么 sudo npm 是坏习惯
- 装包脚本(postinstall)会以 root 执行,恶意包的破坏力拉满;
- root 创建的文件混进你的缓存目录,之后普通权限操作频频 EACCES;
- CI/部署环境与本地权限模型不一致,埋坑。
常见问题(FAQ)
Q:项目内 npm install(不加 -g)也要 sudo 吗?
不需要也不应该。项目依赖装进项目目录的 node_modules,只要你拥有项目目录即可。如果报权限错,检查是不是之前用 sudo 跑过导致 node_modules 被 root 拥有:sudo chown -R $(whoami) .。
Q:公司电脑没有管理员权限能装 Node 吗?
能。用 nvm 或下载 Node 官方二进制包解压到家目录,把 bin 加进 PATH 即可,全程无需管理员权限。
Q:改完 prefix 后全局命令找不到了?
确认 ~/.npm-global/bin 已加入 PATH 且终端已重开;用 npm config get prefix 核对配置生效。