当尝试全局安装某个包得时候,你可能会收到EACCES错误。这说明你没有权限写入npm用于存储全局包和命令的目录。
你可以用下面三种方法解决此问题:
1. 修改npm默认目录的权限;
2. 将npm默认目录定向到其他你具有读写权限的目录;
3. 使用某个包管理器来安装node,它会为你处理好权限问题。
继续下一步之前,你最好先备份以下你的电脑。
## 方法1:修改npm默认目录的权限
1、找到npm的目录路径:
~~~
npm config get prefix
~~~
对于很对系统,路径将会是 /usr/local.
警告:如果出来的路径仅是 /usr,请调到方法2,否则你可能会设置错误。
2、将npm目录的拥有者修改为当前用户的名字(你账户的用户名):
~~~
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
~~~
这会改变npm及其他工具用到的子文件夹的权限(lib/node_modules, bin, and share)。
## 方法2:将npm默认目录定向到其他你具有读写权限的目录
很多时候你可能并不想改变npm所用的默认目录(如/usr)的拥有者,因为这可能会导致一些问题,比如你在与其他用户共用此系统时。
这时,你可以设置npm整个地去使用另一个目录。我将它设置为我的主文件夹下的一个隐藏的目录。
1、创建一个目录用作全局安装:
~~~
mkdir ~/.npm-global
~~~
2、配置npm使用这个新目录:
~~~
npm config set prefix '~/.npm-global'
~~~
3、打开或者创建一个“~/.profile”文件并添加下行代码:
~~~
export PATH=~/.npm-global/bin:$PATH
~~~
4、返回命令行,更新系统变量:
~~~
source ~/.profile
~~~
测试:不用sudo,全局下载安装一个包:
~~~
npm install -g jshint
~~~
不使用第2-4步的方法的话,你也可以使用相应的环境变量(比如如果你不想编辑~/.profile)来实现:
~~~
NPM_CONFIG_PREFIX=~/.npm-global
~~~
## 方法3:使用某个包管理器来为你解决权限问题。
如果你正在Mac OS上全新安装node,你可以使用Homebrew包管理器,避免所有的问题。Homebrew使用正确的权限设置它安装的程序来填坑。(Homebrew真的很“自酿”……)
~~~
brew install node
~~~
--