node 版本管理(nvm)
简介
我们在运行项目时,总是会遇到各种各样的问题,比如node.js版本过高或过低,导致项目无法正常运行,需要去降级或升级, 不同项目必须依赖不同版的 NodeJS 运行环境
nvm 应运而生,nvm 是 Mac 下的 node 管理工具,有点类似管理 Ruby 的 rvm ,
安装
如果需要管理 Windows 下的 node,官方推荐使用 nvmw 或 nvm-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版本号] ##设置默认版本