gyp警告EACCES:用户“root”没有访问dev目录的权限

53

尝试

sudo npm install protractor -g

再次出现了同样臭名昭著的错误/警告(通过谷歌搜索无果):

gyp WARN EACCES user "root" does not have permission to access the dev dir "/Users/dmitrizaitsev/.node-gyp/0.12.0"

看起来发生的情况是,在同一次安装过程中,尽管已经是我电脑上当前的Node版本,但节点版本0.12.0仍然被下载并重建了多次:

node -v
v0.12.0

问题:

  • "/Users/dmitrizaitsev/.node-gyp/0.12.0" 目录实际上是不存在的!为什么会有这样误导性的信息?

  • 为什么在 node v0.12.0 或之前使用 node-gyp 进行成功重建时,该目录都没有被创建?

  • (显然) 我该如何防止这种情况发生?

我在运行 Mac OSX 10.8.5,如果这有任何重要性。

3个回答

90

更新。有一种更好的方法——将npm的默认全局目录更改为您已经拥有正确权限的用户子目录,因此无需首先混乱系统文件的权限或所有权。

https://docs.npmjs.com/getting-started/fixing-npm-permissions所建议:

  1. 创建全局安装的目录:
mkdir ~/.npm-global
  1. 配置npm使用新的目录路径:
npm config set prefix '~/.npm-global'
  1. 打开或创建一个~/.profile(或~/.bash_profile等)文件,并在文件末尾添加此行代码:
export PATH=~/.npm-global/bin:$PATH
  1. 在命令行中更新系统变量:
source ~/.profile

或者 source ~/.bash_profile

另请参阅Sindre Sorhus在此主题上的指南:https://github.com/sindresorhus/guides/blob/master/npm-global-without-sudo.md


现在已经找出问题所在:

该目录权限不正确 - 它是不可的(这比“可访问”的错误消息更好)。

因为它不可写,所以会使用临时目录,并在每次使用后删除,这就是为什么整个下载过程一遍又一遍地运行。

解决方法是设置用户权限:

sudo chown -R $USER <directory>

永远不要再运行sudo npm了。似乎每当您运行sudo npm时,所有创建的子目录都会获得错误的权限,这将导致以后出现问题。

点击此处获取更多详细信息


27

尝试使用以下命令:

sudo npm install -g 模块名 --unsafe-perm


3
不,你不需要使用 sudo npm —— 参考我的回答! - Dmitri Zaitsev
1
谢谢,它解决了我的问题。由于某些原因,我无法实现上面的答案。 - Damjan Pavlica
对我来说这个方法可行。在根目录下运行npm,所以需要确保它可以作为root运行。--unsafe-perm。感谢修复。 - A H Bensiali
还在 pkg 文档中提到:https://www.npmjs.com/package/serialport/v/7.0.2如果您要使用 sudo 或 root 安装 Node-Serialport,则需要使用不安全参数标志才能让 npm 正常工作。sudo npm install serialport --unsafe-perm --build-from-source - Efren

2

这是因为您在此目录"/Users/dmitrizaitsev/.node-gyp/0.12.0"中没有文件夹。

只需创建一个名为0.12.0的新文件夹,该文件夹的版本号与您的节点版本号相同

这将解决问题。


2
两年后,我在使用node 9.0.0时遇到了这个问题,当然我没有/usr/local/js/node-v9.0.0/lib/node_modules/@angular/cli/node_modules/node-sass/.node-gyp/9.0.0目录,因为安装脚本应该处理这个问题。毕竟这就是它的作用。相反,我得到了一个“没有权限”的错误和一个无限循环的安装过程。感觉像90年代。滑稽可笑。 - David Tonhofer
好的,mkdir 命令使安装程序退出了循环。继续下一个问题。 - David Tonhofer

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