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


271

我设法破坏了npm安装程序,每当尝试使用安装软件包时npm install,都会收到以下错误消息:

未处理的拒绝错误:EACCES:权限被拒绝,打开'/Users/marknorgate/.npm/_cacache/tmp/a449402d'

我尝试过重新安装node&npm,也尝试使用这些说明将我的npm缓存重定位到其他地方,但没有任何效果。

我该如何运作?

Answers:


924

将用户的npm相关文件夹的所有权还原到当前用户,如下所示:

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

10
这为我工作后,我试图4-5,没有工作的其他事项:1)--unsafe烫发,2)升级NPM,3)重新启动,4)使用sudo运行,等等等等
亚历纽约

2
和@AlexYork对我一样。我已经看到我的用户和组已经是这两个用户的所有者,但是我猜一个或两个子目录具有不同的所有者。谢谢!
Vedran

1
这对我有用:),在此之前我尝试了docs.npmjs.com/…。无法了解它是相同的问题还是不同的问题。
nim118

1
看起来,在我整理节点的某个时候,其中一个缓存目录是用root所有权创建的。这解决了所有问题。谢谢!
朗农·福斯特

2
这对我有用,谢谢!我尝试使用npm推荐的节点版本管理器重新安装npm,但没有成功!
温妮·潘


42

如果您第一次运行NPM时使用sudo,例如在尝试执行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 env变量(重新启动终端或使用source命令)

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


3
投票支持有关原因的明确解释:)
lnoogn

对。当上面的“正确解决方案”没有解决时,这为我解决了问题。
约翰·史密斯,

所有这些东西都应该通过npm进行抽象,但是我们必须手动处理它。您会认为维护人员应优先解决此类问题,但是我知道什么。感谢您解释为什么我们需要执行这些命令!
YungGun





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

这是为我工作的那个




1

变更所有权

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

为我使用sudo安装软件包工作


1

尝试使用此方法:在命令行的主目录中,为全局安装创建目录:

mkdir ~/.npm-global

配置npm以使用新的目录路径:

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

在您喜欢的文本编辑器中,打开或创建〜/ .profile文件并添加以下行:

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

在命令行上,更新系统变量:

source ~/.profile

现在使用npm install应该可以。





By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.