当尝试全局安装某个包得时候,你可能会收到EACCES错误。这说明你没有权限写入npm用于存储全局包和命令的目录。
你可以用下面三种方法解决此问题:
- 修改npm默认目录的权限;
- 将npm默认目录定向到其他你具有读写权限的目录;
- 使用某个包管理器来安装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
--