解决macOS下npm全局安装包的权限错误

2,370 阅读2分钟

错误截图:

错误图示

起因

出现权限错误的原因大概率是你在 Node.js 的官网下载了 Node.js 的安装器,并通过这个安装器来安装 Node.js。

npm 官方并不推荐使用 Node.js 安装器去安装 Node.js。

因为 Node.js 安装进程会将 npm 安装到本地需要权限的路径,这么做会导致当你使用 npm 在全局安装包的时候发生权限错误(permissions errors)。

解决方案

npm 官方提供了两种解决这个问题的方式。

  • 通过 node 版本工具重新安装你的 npm(推荐)

  • 手动修改 npm 的默认文件夹

我们在这里直接使用官方推荐的方式解决这个问题。

最佳方案

通过 node 版本工具重新安装你的 npm,这是避免权限问题的最佳方案。你不需要移除当前版本的 npm 或者是 Node.js 。

我们使用 nvm 来作为管理 Node.js 的工具。

安装 nvm

由于网络问题,通过 nvm 官网提供的安装脚本很有可能安装失败,因此我推荐你手动的安装 nvm。

  1. 在命令行中输入如下命令:

    export NVM_DIR="$HOME/.nvm" && (
      git clone https://github.com/nvm-sh/nvm.git "$NVM_DIR"
      cd "$NVM_DIR"
      git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)`
    ) && \. "$NVM_DIR/nvm.sh"
    
  2. ~/.zshrc 中 添加如下代码:

    注释:这是为了在启动终端后能够使用 nvm

    export NVM_DIR="$HOME/.nvm"
    [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
    

    如果在用户目录(也就是打开终端后的默认目录)上并没有 ~/.zshrc ,那么你需要创建这个文件:

    touch .zshrc
    

    然后再把代码粘贴进去,保存,重启终端。

  3. 重启终端后输入

    nvm -v
    

    如果终端中出现了一串类似于版本号的数字,那么恭喜你安装成功了~

    nvm版本号

使用nvm安装 node.js

在控制台中运行下面的命令:

nvm install 12

成功安装node

注意:

  • nvm install node 下载的是最新版本的 node,不建议用最新的
  • nvm install 12 这里的 12 指的是版本号,建议使用偶数版本,奇数版本是非稳定版本

当你安装完 node 之后,npm也就跟着安装好了。

你可以使用 npm --version 命令来看看 npm 的版本。

最后一点探究

:最后我们探究一下,为什么使用 nvm 安装之后就不会存在权限问题。

:因为 nvm 安装的 Node.js 路径并不在需要权限的路径中

我们可以在终端中输入

open .nvm

此时终端将会打开 Finder

此时我们就可以发现 Node.js 其实是安装在用户根目录(也就是~这个路径 )上的。

nvm安装路径

参考