使用 nvm 安装与管理 node

简介

Node Version Manager(Node版本管理器),用它可以方便的在机器上安装并维护多个Node的版本

github 官方地址. https://github.com/creationix/nvm

卸载已安装到全局的 node/npm

如果之前是在官网下载的 node 安装包,运行后会自动安装在全局目录,其中node 命令在 /usr/local/bin/node 
npm 命令在全局 node_modules 目录中,具体路径为 /usr/local/lib/node_modules/npm 
安装 nvm 之后最好先删除下已安装的 node 和全局 node 模块
如果不是全局安装的node 可以下终端下使用命令查看node安装目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# mac 下可以使用
which node
# windows 下可以使用
where node
# 查看已经安装在全局的模块,以便删除这些全局模块后再按照不同的 node 版本重新进行全局安装
npm ls -g --depth=0
# 删除全局 node_modules 目录
sudo rm -rf /usr/local/lib/node_modules
# 删除 node
sudo rm /usr/local/bin/node
# 删除全局 node 模块注册的软链
cd /usr/local/bin && ls -l | grep "../lib/node_modules/" | awk '{print $9}'| xargs rm

安装 nvm

要安装或更新nvm,可以使用curl使用安装脚本:

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

或者wget

1
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash

脚本将nvm存储库克隆到 ~/.nvm, 并将源行添加到您的配置文件(~/.bash_profile, ~/.zshrc, 〜/.profile 或 ~/.bashrc).

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

安装完成 可以使用命令

1
command -v nvm

如果不对 只需关闭您当前的终端,打开一个新终端,再次尝试验证。

安装切换各版本 node/npm

nvm:

$ nvm Tab

alias               deactivate          install             ls                  run                 unload
clear-cache         exec                list                ls-remote           unalias             use
current             help                list-remote         reinstall-packages  uninstall           version

nvm alias:

$ nvm alias Tab

default

$ nvm alias my_alias Tab

v0.6.21        v0.8.26       v0.10.28

nvm use:

$ nvm use Tab

my_alias        default        v0.6.21        v0.8.26       v0.10.28

nvm uninstall:

$ nvm uninstall Tab

my_alias        default        v0.6.21        v0.8.26       v0.10.28

nvm 常用命令汇总

1
2
3
4
5
6
7
8
9
10
nvm install stable #安装最新稳定版 node
nvm install 8.8.0 #安装指定的node版本
# 特别说明:以下模块安装仅供演示说明,并非必须安装模块
nvm use 8.8.0 #切换至 8.8.0 版本
npm install -g mz-fis #安装 mz-fis 模块至全局目录,安装完成的路径是 /Users/<你的用户名>/.nvm/versions/node/v0.12.7/lib/mz-fis
nvm use 4 #切换至 4.2.2 版本
npm install -g react-native-cli #安装 react-native-cli 模块至全局目录,安装完成的路径是 /Users/<你的用户名>/.nvm/versions/node/v4.2.2/lib/react-native-cli
nvm alias default 8.8.0 #设置默认 node 版本为 8.8.0

使用 .nvmrc 文件配置项目所使用的 node 版本

如果你的默认 node 版本(通过 nvm alias 命令设置的)与项目所需的版本不同,则可在项目根目录或其任意父级目录中创建 .nvmrc 文件,在文件中指定使用的 node 版本号,例如:

1
2
3
4
cd <项目根目录> #进入项目根目录
echo 4 > .nvmrc #添加 .nvmrc 文件
nvm use #无需指定版本号,会自动使用 .nvmrc 文件中配置的版本
node -v #查看 node 是否切换为对应版本

或者直接将它放入您的 $HOME/.zshrc 中,以便在您输入包含.nvmrc文件的目录时自动调用nvm,该文件的字符串告诉nvm要使用的节点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
local node_version="$(nvm version)"
local nvmrc_path="$(nvm_find_nvmrc)"
if [ -n "$nvmrc_path" ]; then
local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
if [ "$nvmrc_node_version" = "N/A" ]; then
nvm install
elif [ "$nvmrc_node_version" != "$node_version" ]; then
nvm use
fi
elif [ "$node_version" != "$(nvm version default)" ]; then
echo "Reverting to nvm default version"
nvm use default
fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc

nvm 与 n 的区别

node 版本管理工具还有一个是TJ 大神的 n命令,n 命令是作为一个 node 的模块而存在
而 nvm 是一个独立于 node/npm 的外部 shell 脚本,因此 n 命令相比 nvm 更加局限。
这样看下来,nvm 和 n 的差异还是比较大的,具体体现在:

如何选择?

安装简易度。nvm 安装起来显然是要麻烦不少;n 这种安装方式更符合 node 的惯性思维。见仁见智吧。
系统支持。注意, nvm 不支持 Windows。
对全局模块的管理。n 对全局模块毫无作为,因此有可能在切换了 node 版本后发生全局模块执行出错的问题;
nvm 的全局模块存在于各自版本的沙箱中,切换版本后需要重新安装,不同版本间也不存在任何冲突。
关于 node 路径。n 是万年不变的 /usr/local/bin;nvm 需要手动指定路径。
所以,如何选择?真心见仁见智了,不过这里可以给出大体的建议: