一尘不染

gyp WARN EACCES用户“ root”没有访问开发目录的权限

node.js

尝试去

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。


阅读 278

收藏
2020-07-07

共1个答案

一尘不染

更新。有一个更好的方法-将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。似乎每当您运行时sudonpm,所有创建的子目录都会获得错误的权限,这将在以后导致问题。

2020-07-07