node 版本管理(nvm)

邱秋 • 2019年11月08日 • 阅读:164 • nodejs npm

简介

我们在运行项目时,总是会遇到各种各样的问题,比如node.js版本过高或过低,导致项目无法正常运行,需要去降级或升级, 不同项目必须依赖不同版的 NodeJS 运行环境

nvm 应运而生,nvm 是 Mac 下的 node 管理工具,有点类似管理 Ruby 的 rvm ,

安装

如果需要管理 Windows 下的 node,官方推荐使用 nvmwnvm-windows。不过,nvm-windows 并不是 nvm 的简单移植,他们也没有任何关系.

For Windows

windows包下载地址:https://github.com/coreybutler/nvm-windows/releases

下载 nvm-setup.zip 安装即可

For Mac

brew install nvm

修改 ~/.profile or ~/.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

然后新建一个目录

mkdir ~/.nvm

For Linux

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
# or
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash

安装多版本 node/npm

例如,我们要安装14.2.2版本,可以用如下命令:

nvm install 14.2.2

nvm 遵守语义化版本命名规则。例如,你想安装最新的 14.2 系列的最新的一个版本的话,可以运行:

nvm install 14.2

nvm 会寻找 14.2.x 中最高的版本来安装。

你可以通过以下命令来列出远程服务器上所有的可用版本:

nvm ls-remote

Windows 的话,就是:

nvm ls available

版本间切换

每当我们安装了一个新版本 Node 后,全局环境会自动把这个新版本设置为默认。

nvm 提供了 nvm use 命令。这个命令的使用方法和 install 命令类似。

例如,切换到 14.2.2:

nvm use 14.2.2

切换到最新的 14.2.x:

nvm use 14.2

切换到 iojs:

nvm use iojs-v13.2.0

切换到最新版:

nvm use node

每次执行切换的时候,系统都会把 node 的可执行文件链接放到特定版本的文件上。

设置别名

我们还可以用 nvm 给不同的版本号设置别名:

nvm alias awesome-version 14.2.2

我们给 14.2.2 这个版本号起了一个名字叫做 awesome-version,然后我们可以运行:

nvm use awesome-version

下面这个命令可以取消别名:

nvm unalias awesome-version

另外,你还可以设置 default 这个特殊别名:

nvm alias default node

列出已安装实例

nvm ls

node多版本和 npm包

如果之前装的node是 14.x版本,要升级到最新版本,那么npm 也会随着升级,那之前 npm -g 全局安装的包怎么办呢?不想一个一个的去升级。这个时候可以执行:

nvm install NEW_VERSION --reinstall-packages-from=OLD_VERSION

例如 从 14升级到19 版本

nvm install 19.x --reinstall-packages-from=14.x

或者

# 当前版本升级到最新稳定版本
nvm install stable --reinstall-packages-from=current

# or
nvm install lts/dubnium  --latest-npm --reinstall-packages-from=$(nvm current)
nvm install lts/erbium  --latest-npm --reinstall-packages-from=$(nvm current)

意思是 将 npm 包从之前的 Node 版本重新安装到新版本

然后,您可以检查是否所有内容都已正确重新安装

npm list -g --depth=0

以及更新所有软件包

npm update -g

如果需要,还可以卸载删除指定的老版本

# 卸载10.15.3 版本
nvm uninstall 10.15.3

多版本在不用的项目中使用

系统存在多个 版本的node,且有多个项目, 使用不同版本的node,这个时候不能全局切换版本的。否则导致项目无法运行。

这个时候需要给每个项目指定不同的版本,保证其能运行 ,进入到项目目录

指定当前node版本为项目的node 环境

$ node -v > .nvmrc

指定 使用 5.9 的版本

$ echo "5.9" > .nvmrc

使用最新的 LTS (Long-term Support) 版本

$ echo "lts/*" > .nvmrc

使用最新的 Node.js 版本

echo "node" > .nvmrc

之后在项目目录中执行 nvm use 即可

在执行如下这些命令时,会自动读取 .nvmrc 中版本号以应用上

nvm use
nvm install
nvm exec
nvm run
nvm which

这样协作者将项目 clone 下来后直接 nvm use 就直接切换到相应版本,如果本地没有安装,nvm install 则会安装相应版本。

也可以在 package.json 中通过 engines 属性指定 Node.js 的版本。

{
    "engines": { "node": ">=0.10.3 <0.12" }
}

甚至可以限定 npm 的版本:

{
    "engines": { "npm": "~1.0.20"  }
}

常用命令

nvm run 14.2.2 --version ## 直接运行特定版本的 Node
nvm exec 14.2.2 node --version ## 在当前终端的子进程中运行特定版本的 Node
nvm which 14.2.2 ## 确认某个版本Node的路径
nvm install stable ## 安装最新稳定版 node
nvm install <version> ## 安装指定版本
nvm uninstall <version> ## 删除已安装的指定版本
nvm use <version> ## 切换使用指定的版本node
nvm ls ## 列出所有安装的版本
nvm ls-remote ## 列出所有远程服务器的版本
nvm current ## 显示当前的版本
nvm alias <name> <version> ## 给不同的版本号添加别名
nvm unalias <name> ## 删除已定义的别名
nvm reinstall-packages <version> ## 在当前版本 node 环境下,重新全局安装指定版本号的 npm 包
nvm alias default [node版本号] ##设置默认版本

我,秦始皇,打钱!