最近遇到了一个需要旧版本Node才能启动的项目,但是实在不想卸载Win上的node版本,于是在Ubuntu 22.04虚拟机上使用nvm来安装旧版本Node,便于Node版本切换,并且日后也方便封装成docker镜像。

nvm在Github:

安装nvm

在Github上可以找到nvm的安装方法,目前v0.39.3的安装方法如下:

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

运行后会在~/.nvm下安装nvm。由于安装程序将导出nvm环境变量的代码写入了~/.bashrc,所以可以运行source ~/.bashrc使nvm环境变量生效。

nvm换源

运行nvm ls-remote可以列出所有可供安装的Node版本,但是也可能没有任何输出,这是网络环境的原因。所以我们需要给nvm换源。

nvm.sh中,程序定义了NVM_NODEJS_ORG_MIRROR变量来指定从哪里获取Node二进制程序。所以只需要在nvm.sh中改变该变量的值即可。使用cat -n nvm.sh | grep NVM_NODEJS_ORG_MIRROR查到该变量在1983行定义:

root@ipangbo-server:~/.nvm# cat -n nvm.sh | grep NVM_NODEJS_ORG_MIRROR
  1983      node-std) nvm_echo "${NVM_NODEJS_ORG_MIRROR:-https://nodejs.org/dist}" ;;
  2977        nvm_err "\$NVM_NODEJS_ORG_MIRROR: '${NVM_NODEJS_ORG_MIRROR}'"
  4214        unset NVM_RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_IOJS_ORG_MIRROR NVM_DIR \

使用vim打开该文件:vi nvm.sh,输入:set number显示行号,输入:1983来跳转到1983行,把该变量中的网址替换为:

https://mirrors.aliyun.com/nodejs-release/

替换后,再次运行nvm ls-remote,nvm已经可以输出所有node的二进制版本。使用诸如nvm install v16.19.0的命令来安装Node;使用nvm ls来列出已经安装的Node版本;使用诸如nvm use v16.19.0的命令来切换Node版本。

npm更新与换源

Node自带的npm往往不是最新,要更新npm,可以使用安装npm的命令。但在此之前,npm仍然需要换源才能顺利下载。

要查看当前使用的npm源,运行npm config get registry。可以看到默认的npm源来自https://registry.npmjs.org/。要替换成阿里源,运行:

npm config set registry http://registry.npmmirror.com

再次运行npm config get registry,可以看到输出已变为阿里源。

接下来,使用安装npm的命令来更新npm:

npm install -g npm

可以在下载的时候观察到,npm正从registry.npmmirror.com下载。

yarn安装及换源

yarn在一定程度上是npm的替代品,却需要从npm安装:

npm install -g yarn

yarn的命令与npm相似,安装好后,可以使用yarn config get registry查询到yarn的默认源为https://registry.yarnpkg.com。若要换源,可以使用:

yarn config set registry http://registry.npmmirror.com