使用 NVM 管理多个 Node.js 版本

一开始不知道有 NVM 这个 Node.js 版本控制工具,一般都选择直接在 Node.js 官方网站直接安装或者 brew install node 安装最新版本或指定版本。

但随着使用 Node.js 需求的不断深入,我开始需要在同一个设备上使用不同的 Node.js 版本来进行开发。

因此就了解到了可以使用 NVM 来控制 Node.js 版本。

由于我的 macOS 已经安装过 Node.js 了,因此需要先完整删除掉原来的 node 相关的东西。


完整卸载全局安装的 Node.js 和 NPM 的方法

  • 删除 /usr/local/lib 和 /usr/local/include 两个文件夹当中和 Node.js 与 node_modules 相关的文件夹,一般是 node 和 node_modules 等文件夹名字
  • 删除用户目录下的所有 local、lib、include、share 当中和 Node.js 与 node_modules 相关的文件夹,同上文件夹名字
  • 删除 /usr/local/bin 当中 node 可执行文件
  • 如果是使用 brew install node 安装的话,再单独使用使用命令 brew uninstall node 进行完整卸载
  • 注意:只适用于 macOS 系统,如果是 windows 系统,请使用自带卸载功能,再手工删除 node_modules 等文件夹和 Path 路径相关即可。

确保完整删除掉所有 node 相关的文件夹之后,可以在控制台输入 node -v 与 npm -v 测试看看是否还有残留。

删除完毕之后,就可以开始尝试安装 NVM 工具了。

在实际安装过程中,略有小坑,所以稍微记录一下。


安装 NVM 方法

  • macOS 上需要先安装 C++ 编辑器,在控制台输入命令:xcode-select --install 根据提示安装
  • 第一种安装 NVM 方法:curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
  • 第二种安装 NVM 方法:wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
  • 如因网络原因导致无法 curl 到资源,可手工下载 install.sh 脚本,然后打开控制台输入 bash xxxx/install.sh 手工执行安装流程。
  • 这里的 xxxx 指的是 install.sh 下载所在的路径
  • 安装后可尝试输入 nvm ls-remote 测试是否安装成功。如成功,则会列出当前可指定安装的所有 Node.js 版本
  • 如提示 nvm:command not found 是因为~/.bash_profile~/.zshrc~/.profile, ~/.bashrc  当中都没有指定 path 导致无法识别 nvm 命令。
  • 解决办法是:打开上边的其中一个文件,加上以下命令即可,比如我是选择加入到 ~/.bash_profile 这个配置文件中
  • 输入 open ~/.bash_profile 打开文件之后,粘贴以下内容即可:
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s “NVM_DIR/nvm.sh“ ] && . “NVM_DIR/nvm.sh“
  • 特别要注意的是,每次修改 .bash_profile 后都要执行下 source ~/.bash_profile 来重新加载让它生效
  • 再次输入 nvm ls-remote 应该就可以看到所有版本号,然后就可以使用 nvm  install v14.15.3 指定想要的 node.js 版本号来进行安装了
  • 如果想要在不同版本的 node 进行切换的话,可使用 nvm use +指定版本号 来完成切换操作
  • 如在某些项目中发现跟当前系统 node 版本号不同,可以在项目根目录创建 .nvmrc 文件,并写入指定版本号码,比如 14.1.1,然后在项目文件目录下运行 nvm use,就会自动根据 .nvmrc 文件中指定的 node.js 版本号自动下载。安装后使用 node -v 命令来确认是否成功

更具体的文档,可参考 nvm 官方仓库地址:https://github.com/nvm-sh/nvm

另外上边提及的安装过程中,如果 curl 失败的话一般是网络问题,可以手工打开上边的仓库,下载里边的 intall.sh 脚本即可。