当安装全局包的时候可能会得到EACCES错误。这表示你没有npm使用存储全局包和命令目录的写权限。
可以通过以下三种方式之一解决:
- 给npm的默认目录赋予权限。
- 把npm的默认目录改到其他有权限的目录。
- 安装有包管理器的node,可以为你做这些。
操作前最好备份一下。
选项一:给npm默认目录赋予权限
- 找到npm的目录路径
npm config get prefix
大多数的系统,目录在/usr/local
.
警告: 如果目录是在/usr
,请使用第二种方法,不然权限很混乱。
2.改变npm目录的所有者为当前用户的名称:
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_module,bin,share}
这会改变npm使用的子目录的权限,还有一些其他工具目录(lib/node_modules,bin,share)
选项二:把npm的默认目录改到其他目录
有时候不想改变npm的默认目录的拥有关系,因为可能会导致一些问题:比如正在和其他人共享这个用户。
但是,你可以把npm配置到其他目录里。在这个例子里,在我们的主目录里这是一个隐藏的目录
- 为全局安装创建一个目录
mkdir ~/.npm-global
- 将npm配置到新目录路径
npm config set prefix `~/.npm-global`
- 打开或者创建一个~/.profile文件并添加一行:
export PATH=~/.npm-global/bin:$PATH
- 回到命令行,更新系统变量:
source ~/.profile
测试:不使用sudo
下载一个全局包
npm install -g jshint
除了2-4步,还可以使用相应的ENV变量(如果不想修改~/.profile):
NPM_CONFIG_PREFIX=~/.npm-global
选项三:使用包管理器来做这些
如果你是在Mac OS上新安装node,通过使用Homebrew
包管理器完全可以避免这些问题。Homebrew会正确的为你设置这些事情。
brew install node