gyp WARN EACCES用户“root”无权访问dev dir
尝试去
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。
回答如下:UPDATE。有一种更好的方法 - 将npm
的默认全局目录更改为您已拥有正确权限的用户子目录,因此无需首先弄乱系统文件的权限或所有权。
正如https://docs.npmjs/getting-started/fixing-npm-permissions所推荐:
- 为全局安装创建一个目录:
mkdir ~/.npm-global
- 配置npm以使用新的目录路径:
npm config set prefix '~/.npm-global'
- 打开或创建一个
~/.profile
(或~/.bash_profile
等)文件并添加此行(在文件末尾):
export PATH=~/.npm-global/bin:$PATH
- 在命令行上,更新系统变量:
source ~/.profile
或者source ~/.bash_profile
另见Sindre Sorhus关于该主题的指南:https://github/sindresorhus/guides/blob/master/npm-global-without-sudo.md
现在想出了什么是错的:
该目录具有错误的权限 - 它不可写(这可能是比“可访问”更好的错误消息)。
并且因为它不可写,所以在每次使用后都使用并删除了一个临时目录,这就是整个下载必须一次又一次地运行的原因。
解决方案是使用设置用户权限
sudo chown -R $USER <directory>
而且再也没有sudo npm
。似乎无论何时运行sudo npm
,所有创建的子目录都会获得错误的权限,这将导致以后出现问题。
See here for more details。