# #8 NVM 简易入门

nvm是一个node的版本管理工具，使用这个组件可以在一个系统上安装多个不同版本的node，这极大方便了程序开发时的调试工作。

## 安装 NVM

安装 curl 并执行 nvm 安装脚本

```
 sudo apt install curl
 curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash   
```

## 安装 Node.js

### 安装最新版本的 Node.js

```
 nvm install node # "node"是最新版的一个别名
```

### 安装最新的 LTS 版 Node.js

```
 nvm install --lts 
```

*需要安装指定的LTS版本，可以在 `--lts=<LTS name>` 加上代号。carbon 为v8最新，dubnium 为v10最新，erbium 为v12最新，fermium为v14最新。*

### 安装指定版本的 Node.js

```
 nvm install 13.14.0
```

卸载指定版本的 node.js

```
 nvm uninstall 13.14.0
```

*最后安装的版本将被设置为默认版本*。

## NVM 常用命令

列出已安装的所有 node.js 版本

```
 nvm ls
```

列出可安装的所有 node.js 版本

```
 nvm ls-remote
```

切换到指定版本的 node.js

```
 nvm use 13.14.0 
```

查看当前默认的 node.js 版本

```
 nvm current
```

升级当前的 node.js 的 npm 到最新版本

```
 nvm install-latest-npm
```

导入指定版本的 npm 包到当前版本的 node.js 中

```
 nvm reinstall-packages 13.14.0
```

```
 nvm run 
```

指定 node.js 版本来运行某个 node 脚本

```
 nvm exec 13.14.0 server.js 
```

## .nvmrc 使用方法

在同一台服务器，用不同的 node.js 版本运行不同的 node 脚本，是否可行？ 答案是肯定的，首先，我们需要在各个应用系统的根目录下生成一个.nvmrc 文件，注明版本号 然后利用 `nvm run <系统启动文件>` 的方式运行脚本即可。

假设我们当前的 node.js 版本为 最新版

```
 nvm use node
```

执行如下命令，写入 lts/\* 到当前目录下的 .nvmrc 文件。

```
 echo "lts/* " > .nvmrc # 指定最新版的 lts
```

新建一个 app.js 文档，输入如下内容

```
 console.log(process.versions); # 输出当前运行的 node 版本到控制台
```

运行 app.js

```
 nvm run app.js
 ​
 Found '/home/msmn-2010/.nvmrc' with version <lts/*>
 Running node v14.15.5 (npm v6.14.11)
```

.nvmrc用来控制运行版本，用nvm run来启动脚本，便可以方便的完成一个服务器运行多个不同 node 版本的应用系统。

为了自动化完成上述切换操作，我们可以借助一个叫 [**avn**](https://github.com/wbyoung/avn) 的工具。

## NVM 和 N 的区别

还有一个叫 n 的工具，同样是 node 的版本管理工具。 主要区别在于，n 是作为 node 模块而存在的， nvm 是一个 shell 脚本，独立于node 和 npm ，n 使用简便，但会造成切换版本不彻底。

## NVM 小知识

由于 nvm 安装的 node 以及 npm 都是高度独立的版本。切换的时候的确方便了，但也意味着我们安装过的 npm 包都得重新再装一次？ 不，我们可以通过如下命令，导入特定的node 版本下的 node\_modules 到新安装的 node 版本下。

安装最新版的 LTS ，并导入当前的 node\_modules 包

```
nvm install "lts/*" --reinstall-packages-from=current 
```

*引用*

Node Version Manager\
&#x20;<https://github.com/creationix/nvm>

n – Interactively Manage Your Node.js Versions\
<https://github.com/tj/n>
