在npm安装时:未处理的拒绝错误:EACCES:权限被拒绝。

295

我已经把我的npm安装搞坏了,每当我尝试使用npm install安装包时,都会收到类似以下的错误信息:

Unhandled rejection Error: EACCES: permission denied, open '/Users/marknorgate/.npm/_cacache/tmp/a449402d'

我尝试重新安装node和npm,也尝试按照这些说明将我的npm缓存重定位到其他位置,但都没有起作用。

我该如何解决这个问题?

17个回答

991

恢复用户的npm相关文件夹的所有权,将其设置为当前用户,方法如下:

sudo chown -R $USER:$GROUP ~/.npm
sudo chown -R $USER:$GROUP ~/.config

11
在我尝试了4-5种其他方法但都没用之后,这个方法对我有用:1)--unsafe-perm,2)升级npm,3)重启,4)使用sudo运行等等。 - Alex York
2
和@AlexYork一样。我看到我的用户和组已经是这两个文件的所有者,但我猜一个或两个子目录有不同的所有者。谢谢! - Vedran
1
这对我有用:),在此之前,我尝试了https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally。无法理解它是否是同一个问题还是不同的问题。 - nim118
1
对于 macOS 和 fish shell,请使用以下命令替换:# sudo chown -R yourUser:staff ~/.npm 和 # sudo chown -R yourUser:staff ~/.config(将 yourUser 替换为命令 # whoami 的响应)。 - Fjallbacka
2
这对我有用,谢谢! 我尝试使用npm推荐的node版本管理器重新安装npm,但是它没有起作用! - Nhu Phan
显示剩余3条评论

75
sudo chown -R $(whoami) ~/.npm
sudo chown -R $(whoami) ~/.config

47
如果第一次使用sudo运行NPM,例如尝试进行npm install -g,则会发生这种情况。缓存文件夹需要由当前用户拥有,而不是root用户。
sudo chown -R $USER:$GROUP ~/.npm
sudo chown -R $USER:$GROUP ~/.config

在普通用户权限下运行时(而不是sudo),这将使上述文件夹的所有权归属于该用户。

值得注意的是,不应该使用SUDO安装全局包。如果您在权限方面遇到问题,建议更改全局目录。文档建议:

mkdir ~/.npm-global

npm config set prefix '~/.npm-global'

然后在任何定义路径的地方更新PATH(例如~/.profile等)

export PATH=~/.npm-global/bin:$PATH

然后需要确保设置了PATH环境变量(重新启动终端或使用source命令)

https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally


3
感谢您对这个清晰解释的支持。 - lizacodes
是的。当上面的“正确解决方案”无法解决问题时,这个方法对我很有帮助。 - John Smith
所有这些东西都应该被npm抽象出来,但是我们必须手动处理它。你会认为维护者修复这样的问题应该是高优先级的,但我又怎么知道呢。感谢您解释我们为什么需要执行这些命令! - ICW

12
sudo npm cache clean --force --unsafe-perm

然后npm i正常运行


10
以上答案对我没用。尝试使用--unsafe-perm命令运行您的命令。
例如:
npm install -g node@latest --unsafe-perm

这似乎解决了问题。


@JenLim 你解决了吗? - Junaid Farooq
我通过在终端中运行以下命令解决了问题:npm cache clear — force。 - Lim

7

3
更改所有权。
sudo chown -R $USER:$GROUP ~/.npm
sudo chown -R $USER:$GROUP ~/.config 

我使用sudo安装软件包时遇到了问题。


2
sudo npm install --unsafe-perm=true --allow-root

最初的回答对我有效。

2

只需执行 sudo npm cache clean --force --unsafe-perm,然后 npm i 就可以正常进行了。


2

只需在位置 /Users/marknorgate/.npm/_cacache/tmp 下手动创建文件夹_cache/tmp,并以管理员权限运行您的命令即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接