gyp WARN EACCES用户“root”无权访问dev dir

时间:2015-04-06 09:17:11

标签: node.js permissions npm root

尝试

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 version 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 个答案:

答案 0 :(得分:63)

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

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

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

source ~/.bash_profile

另见Sindre Sorhus关于该主题的指南:https://github.com/sindresorhus/guides/blob/master/npm-global-without-sudo.md


现在想出了什么问题:

目录的权限错误 - 它不是可写(这可能是一个比#34更好的错误信息;可访问")。

因为它不可写,所以在每次使用后都使用并删除了一个临时目录,这就是整个下载必须一次又一次地运行的原因。

解决方案是使用

设置用户权限
sudo chown -R $USER <directory>

再也不会sudo npm。 无论何时运行sudo npm,所有创建的子目录都会获得错误的权限,这将导致以后出现问题。

See here for more details

答案 1 :(得分:18)

尝试:

sudo npm install -g 模块 - unsafe-perm

答案 2 :(得分:2)

那是因为你在这个目录中没有一个文件夹“/Users/dmitrizaitsev/.node-gyp/0.12.0”。

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

它将解决问题。