修复npm权限

当安装全局包的时候可能会得到EACCES错误。这表示你没有npm使用存储全局包和命令目录的写权限。

可以通过以下三种方式之一解决:

  1. 给npm的默认目录赋予权限。
  2. 把npm的默认目录改到其他有权限的目录。
  3. 安装有包管理器的node,可以为你做这些。

操作前最好备份一下。

选项一:给npm默认目录赋予权限

  1. 找到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配置到其他目录里。在这个例子里,在我们的主目录里这是一个隐藏的目录

  1. 为全局安装创建一个目录
mkdir ~/.npm-global
  1. 将npm配置到新目录路径
npm config set prefix `~/.npm-global`
  1. 打开或者创建一个~/.profile文件并添加一行:
export PATH=~/.npm-global/bin:$PATH
  1. 回到命令行,更新系统变量:
source ~/.profile

测试:不使用sudo下载一个全局包

npm install -g jshint

除了2-4步,还可以使用相应的ENV变量(如果不想修改~/.profile):

NPM_CONFIG_PREFIX=~/.npm-global

选项三:使用包管理器来做这些

如果你是在Mac OS上新安装node,通过使用Homebrew包管理器完全可以避免这些问题。Homebrew会正确的为你设置这些事情。

brew install node

你可能感兴趣的:(修复npm权限)