# node 版本管理工具 nvm 常见用法 {#node-版本管理工具-nvm-常见用法}
本文总结 nodejs 的版本管理工具 nvm 的常见用法。使用 nvm 不仅可以方便得管理多个 nodejs 版本, 还方便在同一台机器上管理基于不同 node 版本的多个项目(借助.nvmrc 文件)。
# 1. 安装指定版本的 node {#_1-安装指定版本的-node}
# 1.1 安装稳定版本 {#_1-1-安装稳定版本}
nvm install stable
# 1.2 安装指定版本号 {#_1-2-安装指定版本号}
nvm install 版本号
(py3.6) wangshibiao@wangshibiao:~$ nvm install v15.0.1
Downloading and installing node v15.0.1...
Downloading https://npm.taobao.org/mirrors/node/v15.0.1/node-v15.0.1-linux-x64.tar.xz...
################################################################################################################################ 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v15.0.1 (npm v7.0.3)
(py3.6) wangshibiao@wangshibiao:~$ nvm ls
v6.11.0
v6.11.4
v6.17.1
v7.10.1
v8.15.1
v10.1.0
v11.13.0
v13.0.1
-> v15.0.1
default -> v13.0.1
node -> stable (-> v15.0.1) (default)
stable -> 15.0 (-> v15.0.1) (default)
iojs -> N/A (default)
lts/* -> lts/erbium (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.22.1 (-> N/A)
lts/erbium -> v12.19.0 (-> N/A)
(py3.6) wangshibiao@wangshibiao:~$
将版本号替换为具体版本号即可。
# 2. 查询本地已安装的 node 版本列表 {#_2-查询本地已安装的-node-版本列表}
nvm ls
(py3.6) wangshibiao@wangshibiao:~$ nvm ls
v6.11.0
v6.11.4
v6.17.1
v7.10.1
v8.15.1
v10.1.0
v11.13.0
-> v13.0.1
default -> v13.0.1
node -> stable (-> v13.0.1) (default)
stable -> 13.0 (-> v13.0.1) (default)
iojs -> N/A (default)
lts/* -> lts/erbium (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.22.1 (-> N/A)
lts/erbium -> v12.19.0 (-> N/A)
(py3.6) wangshibiao@wangshibiao:~$
左侧有箭头->的版本代表当前的 node 版本。
# 3. 查询远程的 node 版本列表 {#_3-查询远程的-node-版本列表}
执行如下命令查看官方的 node 版本列表,这样就可以查询到当前最新的 node 版本号。
nvm ls-remote
(py3.6) wangshibiao@wangshibiao:~$ nvm ls-remote
v0.1.14
v0.1.15
v0.1.16
v0.1.17
v0.1.18
v0.1.19
v0.1.20
v0.1.21
v0.1.22
v0.1.23
v0.1.24
v0.1.25
v0.1.26
v0.1.27
v0.1.28
v0.1.29
v0.1.30
v0.1.31
v0.1.32
v0.1.33
v0.1.90
v0.1.91
v0.1.92
v0.1.93
v0.1.94
v0.1.95
v0.1.96
v0.1.97
v0.1.98
v0.1.99
v0.1.100
v0.1.101
v0.1.102
v0.1.103
v0.1.104
v0.2.0
v0.2.1
v0.2.2
v0.2.3
v0.2.4
v0.2.5
v0.2.6
v0.3.0
v0.3.1
v0.3.2
v0.3.3
v0.3.4
v0.3.5
v0.3.6
v0.3.7
v0.3.8
v0.4.0
v0.4.1
v0.4.2
v0.4.3
v0.4.4
v0.4.5
v0.4.6
v0.4.7
v0.4.8
v0.4.9
v0.4.10
v0.4.11
v0.4.12
v0.5.0
v0.5.1
v0.5.2
v0.5.3
v0.5.4
v0.5.5
v0.5.6
v0.5.7
v0.5.8
v0.5.9
v0.5.10
v0.6.0
v0.6.1
v0.6.2
v0.6.3
v0.6.4
v0.6.5
v0.6.6
v0.6.7
v0.6.8
v0.6.9
v0.6.10
v0.6.11
v0.6.12
v0.6.13
v0.6.14
v0.6.15
v0.6.16
v0.6.17
v0.6.18
v0.6.19
v0.6.20
v0.6.21
v0.7.0
v0.7.1
v0.7.2
v0.7.3
v0.7.4
v0.7.5
v0.7.6
v0.7.7
v0.7.8
v0.7.9
v0.7.10
v0.7.11
v0.7.12
v0.8.0
v0.8.1
v0.8.2
v0.8.3
v0.8.4
v0.8.5
v0.8.6
v0.8.7
v0.8.8
v0.8.9
v0.8.10
v0.8.11
v0.8.12
v0.8.13
v0.8.14
v0.8.15
v0.8.16
v0.8.17
v0.8.18
v0.8.19
v0.8.20
v0.8.21
v0.8.22
v0.8.23
v0.8.24
v0.8.25
v0.8.26
v0.8.27
v0.8.28
v0.9.0
v0.9.1
v0.9.2
v0.9.3
v0.9.4
v0.9.5
v0.9.6
v0.9.7
v0.9.8
v0.9.9
v0.9.10
v0.9.11
v0.9.12
v0.10.0
v0.10.1
v0.10.2
v0.10.3
v0.10.4
v0.10.5
v0.10.6
v0.10.7
v0.10.8
v0.10.9
v0.10.10
v0.10.11
v0.10.12
v0.10.13
v0.10.14
v0.10.15
v0.10.16
v0.10.17
v0.10.18
v0.10.19
v0.10.20
v0.10.21
v0.10.22
v0.10.23
v0.10.24
v0.10.25
v0.10.26
v0.10.27
v0.10.28
v0.10.29
v0.10.30
v0.10.31
v0.10.32
v0.10.33
v0.10.34
v0.10.35
v0.10.36
v0.10.37
v0.10.38
v0.10.39
v0.10.40
v0.10.41
v0.10.42
v0.10.43
v0.10.44
v0.10.45
v0.10.46
v0.10.47
v0.10.48
v0.11.0
v0.11.1
v0.11.2
v0.11.3
v0.11.4
v0.11.5
v0.11.6
v0.11.7
v0.11.8
v0.11.9
v0.11.10
v0.11.11
v0.11.12
v0.11.13
v0.11.14
v0.11.15
v0.11.16
v0.12.0
v0.12.1
v0.12.2
v0.12.3
v0.12.4
v0.12.5
v0.12.6
v0.12.7
v0.12.8
v0.12.9
v0.12.10
v0.12.11
v0.12.12
v0.12.13
v0.12.14
v0.12.15
v0.12.16
v0.12.17
v0.12.18
iojs-v1.0.0
iojs-v1.0.1
iojs-v1.0.2
iojs-v1.0.3
iojs-v1.0.4
iojs-v1.1.0
iojs-v1.2.0
iojs-v1.3.0
iojs-v1.4.1
iojs-v1.4.2
iojs-v1.4.3
iojs-v1.5.0
iojs-v1.5.1
iojs-v1.6.0
iojs-v1.6.1
iojs-v1.6.2
iojs-v1.6.3
iojs-v1.6.4
iojs-v1.7.1
iojs-v1.8.1
iojs-v1.8.2
iojs-v1.8.3
iojs-v1.8.4
iojs-v2.0.0
iojs-v2.0.1
iojs-v2.0.2
iojs-v2.1.0
iojs-v2.2.0
iojs-v2.2.1
iojs-v2.3.0
iojs-v2.3.1
iojs-v2.3.2
iojs-v2.3.3
iojs-v2.3.4
iojs-v2.4.0
iojs-v2.5.0
iojs-v3.0.0
iojs-v3.1.0
iojs-v3.2.0
iojs-v3.3.0
iojs-v3.3.1
v4.0.0
v4.1.0
v4.1.1
v4.1.2
v4.2.0 (LTS: Argon)
v4.2.1 (LTS: Argon)
v4.2.2 (LTS: Argon)
v4.2.3 (LTS: Argon)
v4.2.4 (LTS: Argon)
v4.2.5 (LTS: Argon)
v4.2.6 (LTS: Argon)
v4.3.0 (LTS: Argon)
v4.3.1 (LTS: Argon)
v4.3.2 (LTS: Argon)
v4.4.0 (LTS: Argon)
v4.4.1 (LTS: Argon)
v4.4.2 (LTS: Argon)
v4.4.3 (LTS: Argon)
v4.4.4 (LTS: Argon)
v4.4.5 (LTS: Argon)
v4.4.6 (LTS: Argon)
v4.4.7 (LTS: Argon)
v4.5.0 (LTS: Argon)
v4.6.0 (LTS: Argon)
v4.6.1 (LTS: Argon)
v4.6.2 (LTS: Argon)
v4.7.0 (LTS: Argon)
v4.7.1 (LTS: Argon)
v4.7.2 (LTS: Argon)
v4.7.3 (LTS: Argon)
v4.8.0 (LTS: Argon)
v4.8.1 (LTS: Argon)
v4.8.2 (LTS: Argon)
v4.8.3 (LTS: Argon)
v4.8.4 (LTS: Argon)
v4.8.5 (LTS: Argon)
v4.8.6 (LTS: Argon)
v4.8.7 (LTS: Argon)
v4.9.0 (LTS: Argon)
v4.9.1 (Latest LTS: Argon)
v5.0.0
v5.1.0
v5.1.1
v5.2.0
v5.3.0
v5.4.0
v5.4.1
v5.5.0
v5.6.0
v5.7.0
v5.7.1
v5.8.0
v5.9.0
v5.9.1
v5.10.0
v5.10.1
v5.11.0
v5.11.1
v5.12.0
v6.0.0
v6.1.0
v6.2.0
v6.2.1
v6.2.2
v6.3.0
v6.3.1
v6.4.0
v6.5.0
v6.6.0
v6.7.0
v6.8.0
v6.8.1
v6.9.0 (LTS: Boron)
v6.9.1 (LTS: Boron)
v6.9.2 (LTS: Boron)
v6.9.3 (LTS: Boron)
v6.9.4 (LTS: Boron)
v6.9.5 (LTS: Boron)
v6.10.0 (LTS: Boron)
v6.10.1 (LTS: Boron)
v6.10.2 (LTS: Boron)
v6.10.3 (LTS: Boron)
v6.11.0 (LTS: Boron)
v6.11.1 (LTS: Boron)
v6.11.2 (LTS: Boron)
v6.11.3 (LTS: Boron)
v6.11.4 (LTS: Boron)
v6.11.5 (LTS: Boron)
v6.12.0 (LTS: Boron)
v6.12.1 (LTS: Boron)
v6.12.2 (LTS: Boron)
v6.12.3 (LTS: Boron)
v6.13.0 (LTS: Boron)
v6.13.1 (LTS: Boron)
v6.14.0 (LTS: Boron)
v6.14.1 (LTS: Boron)
v6.14.2 (LTS: Boron)
v6.14.3 (LTS: Boron)
v6.14.4 (LTS: Boron)
v6.15.0 (LTS: Boron)
v6.15.1 (LTS: Boron)
v6.16.0 (LTS: Boron)
v6.17.0 (LTS: Boron)
v6.17.1 (Latest LTS: Boron)
v7.0.0
v7.1.0
v7.2.0
v7.2.1
v7.3.0
v7.4.0
v7.5.0
v7.6.0
v7.7.0
v7.7.1
v7.7.2
v7.7.3
v7.7.4
v7.8.0
v7.9.0
v7.10.0
v7.10.1
v8.0.0
v8.1.0
v8.1.1
v8.1.2
v8.1.3
v8.1.4
v8.2.0
v8.2.1
v8.3.0
v8.4.0
v8.5.0
v8.6.0
v8.7.0
v8.8.0
v8.8.1
v8.9.0 (LTS: Carbon)
v8.9.1 (LTS: Carbon)
v8.9.2 (LTS: Carbon)
v8.9.3 (LTS: Carbon)
v8.9.4 (LTS: Carbon)
v8.10.0 (LTS: Carbon)
v8.11.0 (LTS: Carbon)
v8.11.1 (LTS: Carbon)
v8.11.2 (LTS: Carbon)
v8.11.3 (LTS: Carbon)
v8.11.4 (LTS: Carbon)
v8.12.0 (LTS: Carbon)
v8.13.0 (LTS: Carbon)
v8.14.0 (LTS: Carbon)
v8.14.1 (LTS: Carbon)
v8.15.0 (LTS: Carbon)
v8.15.1 (LTS: Carbon)
v8.16.0 (LTS: Carbon)
v8.16.1 (LTS: Carbon)
v8.16.2 (LTS: Carbon)
v8.17.0 (Latest LTS: Carbon)
v9.0.0
v9.1.0
v9.2.0
v9.2.1
v9.3.0
v9.4.0
v9.5.0
v9.6.0
v9.6.1
v9.7.0
v9.7.1
v9.8.0
v9.9.0
v9.10.0
v9.10.1
v9.11.0
v9.11.1
v9.11.2
v10.0.0
v10.1.0
v10.2.0
v10.2.1
v10.3.0
v10.4.0
v10.4.1
v10.5.0
v10.6.0
v10.7.0
v10.8.0
v10.9.0
v10.10.0
v10.11.0
v10.12.0
v10.13.0 (LTS: Dubnium)
v10.14.0 (LTS: Dubnium)
v10.14.1 (LTS: Dubnium)
v10.14.2 (LTS: Dubnium)
v10.15.0 (LTS: Dubnium)
v10.15.1 (LTS: Dubnium)
v10.15.2 (LTS: Dubnium)
v10.15.3 (LTS: Dubnium)
v10.16.0 (LTS: Dubnium)
v10.16.1 (LTS: Dubnium)
v10.16.2 (LTS: Dubnium)
v10.16.3 (LTS: Dubnium)
v10.17.0 (LTS: Dubnium)
v10.18.0 (LTS: Dubnium)
v10.18.1 (LTS: Dubnium)
v10.19.0 (LTS: Dubnium)
v10.20.0 (LTS: Dubnium)
v10.20.1 (LTS: Dubnium)
v10.21.0 (LTS: Dubnium)
v10.22.0 (LTS: Dubnium)
v10.22.1 (Latest LTS: Dubnium)
v11.0.0
v11.1.0
v11.2.0
v11.3.0
v11.4.0
v11.5.0
v11.6.0
v11.7.0
v11.8.0
v11.9.0
v11.10.0
v11.10.1
v11.11.0
v11.12.0
v11.13.0
v11.14.0
v11.15.0
v12.0.0
v12.1.0
v12.2.0
v12.3.0
v12.3.1
v12.4.0
v12.5.0
v12.6.0
v12.7.0
v12.8.0
v12.8.1
v12.9.0
v12.9.1
v12.10.0
v12.11.0
v12.11.1
v12.12.0
v12.13.0 (LTS: Erbium)
v12.13.1 (LTS: Erbium)
v12.14.0 (LTS: Erbium)
v12.14.1 (LTS: Erbium)
v12.15.0 (LTS: Erbium)
v12.16.0 (LTS: Erbium)
v12.16.1 (LTS: Erbium)
v12.16.2 (LTS: Erbium)
v12.16.3 (LTS: Erbium)
v12.17.0 (LTS: Erbium)
v12.18.0 (LTS: Erbium)
v12.18.1 (LTS: Erbium)
v12.18.2 (LTS: Erbium)
v12.18.3 (LTS: Erbium)
v12.18.4 (LTS: Erbium)
v12.19.0 (Latest LTS: Erbium)
v13.0.0
-> v13.0.1
v13.1.0
v13.2.0
v13.3.0
v13.4.0
v13.5.0
v13.6.0
v13.7.0
v13.8.0
v13.9.0
v13.10.0
v13.10.1
v13.11.0
v13.12.0
v13.13.0
v13.14.0
v14.0.0
v14.1.0
v14.2.0
v14.3.0
v14.4.0
v14.5.0
v14.6.0
v14.7.0
v14.8.0
v14.9.0
v14.10.0
v14.10.1
v14.11.0
v14.12.0
v14.13.0
v14.13.1
v14.14.0
v15.0.0
v15.0.1
(py3.6) wangshibiao@wangshibiao:~$
左侧有箭头->的版本代表当前的 node 版本。
# 4. 切换本地的 node 版本 {#_4-切换本地的-node-版本}
nvm use 版本号
(py3.6) wangshibiao@wangshibiao:~$ nvm ls
v6.11.0
v6.11.4
v6.17.1
v7.10.1
v8.15.1
v10.1.0
v11.13.0
v13.0.1
-> v15.0.1
default -> v13.0.1
node -> stable (-> v15.0.1) (default)
stable -> 15.0 (-> v15.0.1) (default)
iojs -> N/A (default)
lts/* -> lts/erbium (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.22.1 (-> N/A)
lts/erbium -> v12.19.0 (-> N/A)
(py3.6) wangshibiao@wangshibiao:~$ nvm use v13.0.1
Now using node v13.0.1 (npm v6.12.0)
(py3.6) wangshibiao@wangshibiao:~$ nvm ls
v6.11.0
v6.11.4
v6.17.1
v7.10.1
v8.15.1
v10.1.0
v11.13.0
-> v13.0.1
v15.0.1
default -> v13.0.1
node -> stable (-> v15.0.1) (default)
stable -> 15.0 (-> v15.0.1) (default)
iojs -> N/A (default)
lts/* -> lts/erbium (-> N/A)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.22.1 (-> N/A)
lts/erbium -> v12.19.0 (-> N/A)
(py3.6) wangshibiao@wangshibiao:~$
# 5. 设置 shell 的默认 node 版本 {#_5-设置-shell-的默认-node-版本}
可以设置 shell 环境的默认 node 版本。当我们频繁使用某一个版本时,我们可以设置该版本为默认版本,就没必要经常切换版本了。
执行如下命令设置默认版本号。 nvm alias default 版本号
(py3.6) wangshibiao@wangshibiao:~$ nvm alias default v15.0.1
default -> v15.0.1
(py3.6) wangshibiao@wangshibiao:~$
# 6. 查询当前的版本号 {#_6-查询当前的版本号}
nvm current
(py3.6) wangshibiao@wangshibiao:~$ nvm current
v13.0.1
(py3.6) wangshibiao@wangshibiao:~$
# 7. 在当前 node 版本中安装全局组件 {#_7-在当前-node-版本中安装全局组件}
在 nvm 管理下,实现以沙箱方式全局安装第三方组件到对应版本的 node 中。
非 nvm 管理的情况下,全局组件统统安装在/usr/local/lib/node_modules 目录下。如果希望不同的 node 版本安装在不同的目录下,那是无法实现的。 在 nvm 管理下,全局组件会安装到~/.nvm/versions/node/目录的当前版本 node 下。这是 nvm 强大的地方,在多运行环境的管理和切换极为好用。
-
执行如下命令,会将对应组件安装在 v0.12.4 版本下
nvm use v0.12.4 npm install -g express-generator@3
-
执行如下命令,会将对应组件安装在 v6.3.0 版本下
nvm use v6.3.0 npm install -g express-generator
# 8. 使用.nvmrc 配置不同项目的 node 版本 {#_8-使用-nvmrc-配置不同项目的-node-版本}
为项目配置.nvmrc 文件,有 2 点好处:
- 可以清晰的知道项目基于的 node 版本
我们很有必要为各自的项目指明 node 版本,否则时间久远,甚至开发人员都无法确定项目需要的 node 版本, 那么带来的问题可能就是无法运行或出现各种版本兼容错误,这是很可怕的。 - 方便在同一台机器上管理基于不同 node 版本的多个项目
# 8.1 配置方法 {#_8-1-配置方法}
在项目的根目录下创建文件.nvmrc,文件中指明版本号即可。
echo 13 > ./.nvmrc
将版本号替换为实际版本号即可。
# 8.2 运行项目 {#_8-2-运行项目}
有 2 种运行方法。
# 8.2.1 先使用 nvm use 切换版本 {#_8-2-1-先使用-nvm-use-切换版本}
在项目根目录下执行nvm use,会自动切换当前 node 版本为.nvmrc 配置文件指定的版本。
(py3.6) wangshibiao@wangshibiao:~/test/nodejsDemo$ echo 13 > ./.nvmrc
(py3.6) wangshibiao@wangshibiao:~/test/nodejsDemo$ nvm current
v15.0.1
(py3.6) wangshibiao@wangshibiao:~/test/nodejsDemo$ nvm use
Found '/home/wangshibiao/test/nodejsDemo/.nvmrc' with version <13>
Now using node v13.0.1 (npm v6.12.0)
(py3.6) wangshibiao@wangshibiao:~/test/nodejsDemo$ nvm current
v13.0.1
(py3.6) wangshibiao@wangshibiao:~/test/nodejsDemo$
# 8.2.1 通过 nvm run 直接运行 js 脚本 {#_8-2-1-通过-nvm-run-直接运行-js-脚本}
语法: nvm run js 文件路径
如下示例,演示 demo.js 的运行过程,可以看出,运行 demo.js 所基于的 node 环境并不受当前系统的默认 node 版本影响。
(py3.6) wangshibiao@wangshibiao:~/test/nodejsDemo$ ll
总用量 24
drwxrwxr-x 2 wangshibiao wangshibiao 4096 10月 23 16:02 ./
drwxrwxr-x 33 wangshibiao wangshibiao 12288 10月 23 15:50 ../
-rw-rw-r-- 1 wangshibiao wangshibiao 31 10月 23 15:51 demo.js
-rw-rw-r-- 1 wangshibiao wangshibiao 3 10月 23 16:02 .nvmrc
(py3.6) wangshibiao@wangshibiao:~/test/nodejsDemo$ cat .nvmrc
13
(py3.6) wangshibiao@wangshibiao:~/test/nodejsDemo$ nvm current
v15.0.1
(py3.6) wangshibiao@wangshibiao:~/test/nodejsDemo$ cat ./demo.js
console.log(process.versions);
(py3.6) wangshibiao@wangshibiao:~/test/nodejsDemo$ nvm run ./demo.js
Found '/home/wangshibiao/test/nodejsDemo/.nvmrc' with version <13>
Running node v13.0.1 (npm v6.12.0)
{
node: '13.0.1',
v8: '7.8.279.17-node.14',
uv: '1.33.1',
zlib: '1.2.11',
brotli: '1.0.7',
ares: '1.15.0',
modules: '79',
nghttp2: '1.39.2',
napi: '5',
llhttp: '1.1.4',
openssl: '1.1.1d',
cldr: '35.1',
icu: '64.2',
tz: '2019a',
unicode: '12.1'
}
(py3.6) wangshibiao@wangshibiao:~/test/nodejsDemo$