前言

我们往往习惯性的将Node.js通过Homebrew命令进行安装,如:

➜ brew install node

但是此种方式在使用上有一个很尴尬的问题,Node.js会被安装到/usr/local/lib目录下,在使用中常常会遇到权限不足的问题,虽然通过sudo可以解决,但是最佳的方式是放到我们当前的用户目录下。

nvm的安装方式

nvm 的全称是Node Version Manager,是Node.js的版本管理工具,它可以创建不同版本 Node 的隔离环境,从而避免不同版本包之间的干扰。

截至目前,在 Github 上拥有超过43.6KStar数,支持的命令行有sh, dash, ksh, zsh, bash、支持的系统有unix, macOS, and windows WSL

安装步骤

如果已经使用Homebrew安装过,执行以下命令删除:
rm -rf /usr/local/lib/node_modules
brew uninstall node
# 如果设置过环境变量,删除对应的export语句

1、安装 nvm

# 安装 nvm
➜ brew install nvm

2、安装完成后的提示信息:

You should create NVM's working directory if it doesn't exist:

  mkdir ~/.nvm

Add the following to ~/.zshrc or your desired shell
configuration file:

  export NVM_DIR="$HOME/.nvm"
  [ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh"  # This loads nvm
  [ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && . "/usr/local/opt/nvm/etc/bash_completion.d/nvm"  # This loads nvm bash_completion

You can set $NVM_DIR to any location, but leaving it unchanged from
/usr/local/opt/nvm will destroy any nvm-installed Node installations
upon upgrade/reinstall.

Type `nvm help` for further information.

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

3、根据提示,在命令行执行以上命令:

export NVM_DIR="$HOME/.nvm"
  [ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh"  # This loads nvm
  [ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && . "/usr/local/opt/nvm/etc/bash_completion.d/nvm"  # This loads nvm bash_completion

4、安装具体版本 node:

# 如果不清楚具体版本,可使用 nvm ls-remote 查看所有版本信息
➜ nvm install v10.22.0

5、可使用此命令查看具体目录:

➜ which node
/Users/friday/.nvm/versions/node/v10.22.0/bin/node

nvm常用命令

  • nvm ls-remote:列出远程所有版本
  • nvm install 版本号:安装某版本
  • nvm uninstall 版本号:卸载某版本
  • nvm ls:列出当前已安装的版本及正在使用的版本
  • nvm alias default 版本号:设置本地默认版本
  • nvm use 版本号:临时切换指定版本

影响性能的问题

在安装步骤中,我选择在命令行中执行这段命令而不是将这段命令加入.zshrc是有原因的:

export NVM_DIR="$HOME/.nvm"
  [ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh"  # This loads nvm
  [ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && . "/usr/local/opt/nvm/etc/bash_completion.d/nvm"  # This loads nvm bash_completion

我在将此命令加入.zshrc后,使用终端启动zsh的速度大幅降低,完全影响效率,而且nvm命令的使用场景太少,所以,我选择了在需要使用的时候去执行,而不是一开始就加入环境变量。


参考