使用nvm来管理Node版本

15,385 阅读3分钟

nvmNode.js 的版本管理工具,可以创建不同版本 Node 的隔离环境,从而避免不同版本包之间的干扰。官方 github

卸载全局安装的Node

最近在做项目的时候,发现编译速度特别慢,而升级 Node 版本之后速度会明显提升。所以这才有使用 nvm 来管理 Node 的故事。

目前本地全局安装的 Node 版本是 9.11.1, 这个版本还是18年4月左右更新的,是相当的跟不上节奏了。这里可以查看 Node 历史版本

安装 nvm 之前最好是将现有的全局 Node 进行卸载,否则会发生冲突。

  1. 终端下查看 Node 的全局安装目录:

    ccp:~ ccp$ which node
    /usr/local/bin/node
    
  2. Mac 环境下全局的 Node 会被安装在 /usr/local/bin/ 目录下,接下来我们要打开这个目录;

  3. 打开访达,然后按下快捷键 ⇧ + ⌘ + G,输入上面的目录,即可打开对应的目录;

  4. 接下来依次检查并且删除这些目录下的 nodenode_modules 相关文件和文件夹:

    • /usr/local/lib
    • /usr/local/include
  5. 打开 /usr/local/bin 并删除 node 可执行文件;

  6. 如果你是使用的 brew install node 安装的 Node,那么你还需要在终端中执行 brew uninstall node 命令来卸载。

过程中,你可能还需要在终端中执行一些指令:

sudo rm /usr/local/bin/npm
sudo rm /usr/local/share/man/man1/node.1
sudo rm /usr/local/lib/dtrace/node.d
sudo rm -rf ~/.npm
sudo rm -rf ~/.node-gyp
sudo rm /opt/local/bin/node
sudo rm /opt/local/include/node
sudo rm -rf /opt/local/lib/node_modules

至此,全局安装的 Node 才算卸载干净。

安装nvm

  1. 在终端里执行如下脚本:

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
    

    然后在终端输入命令 command -v nvm,如果显示 nvm 则表示安装成功;否则如果显示 nvm: command not found,则需要做如下操作:

  2. .nvm 同级目录下创建 .bash_profile 文件,终端键入如下命令:

    touch ~/.bash_profile
    
  3. 把以下代码贴到上面的文件中:

    export NVM_DIR=~/.nvm
    source ~/.nvm/nvm.sh
    

nvm常用命令

  • nvm ls-remote 查看 Node 远程版本库
  • nvm install node 将安装最新版本的 Node
  • nvm install v12.7.0 将安装 12.7.0 版本的 Node
  • nvm uninstall v12.7.0 卸载 12.7.0 版本的 Node
  • nvm ls 查看已经安装的 Node 版本
  • nvm use v12.7.0 切换 12.7.0 为当前使用的版本
  • nvm alias default v12.7.012.7.0 设置为 Node 的默认版本
  • nvm which v12.7.0 查看 12.7.0 版本的 Node 的安装目录,比如:/Users/ccp/.nvm/versions/node/v12.7.0/bin/node
  • nvm --help 查看更多命令用法

其他相关命令

  • command -v nvm 查看 nvm 是否安装成功
  • node -v 查看当前使用的 Node 版本
  • which node 查看当前 Node 的安装目录

其他问题

  1. 由于 Node 版本的升级,所以当编译项目的时候可能会报依赖包的错误,这个时候就需要升级依赖包,将项目的 node_modules 目录删了,重新执行 npm install
  2. 升级 Node 后,由于内存 2048M 的限制,编译项目的时候很有可能会报 JS stack trace 内存溢出的错误,这个时候可以用 increase-memory-limit 来解决。