Linux上安装并使用nvm管理node版本 [借助jsDelivr]

十里平湖霜满天,寸寸青丝愁华年。
对月形单望相护,只羡鸳鸯不羡仙。

——《倩女幽魂》阮继志

因为最近跳出Ubuntu的舒适区尝试Linux Mint,需要重新安装nodejs环境,就顺便记录一下nodejs的安装流程,以及安装中遇到的问题。

nvm/npm/nodejs的关系

最开始接触nodejs的时候,最痛苦的莫过于这nxxnxxnxx之间到底是什么关系,我该用哪个之类的疑惑。

简单来说,JavaScript(js) 是一种语言,nodejs是JavaScript的运行时环境,npm是nodejs的包管理器,nvm是一种虚拟环境管理器,让你可以在按需运行不同版本的nodejs。

如果放在我们熟知的Python环境下:Python是一种语言,Python2和3是两个大版本,之下还有很多小版本 (e.g. python-v3.6.8 和 python-v3.7.2),相应的pip就是Python的包管理器,我们可以用anaconda或miniconda作为虚拟环境管理器同时持有运行不同版本的Python运行时。

那有人会问了,我只用一个版本的nodejs,还要安装nvm干什么?

因为nodejs是在持续更新的,我们进行项目collaborate的时候大家使用的nodejs版本大概率不一致,此时别人写的JavaScript代码段(插件)放在我们自己的nodejs版本上很可能就运行不了 (e.g. 就像office2003打不开高版本创建的.docx文件一样)。nvm仅需要一行代码就能创建一个新的虚拟nodejs环境,对应不同版本,然后我们就可以愉快的合作了w

所以,快速迭代,代价是什么?

nvm的安装

nvm是一个托管于GitHub上的开源项目,类似的nodejs环境管理还有n,不过n作为node的模块相比nvm更加局限。

官方两个nvm安装脚本如下:

1
2
3
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
# OR
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

如果遇到(大陆)网络环境问题,有时链接GitHub发生connection failed之类的问题,可以采用jsDelivr CDN代理脚本,命令如下:

1
2
3
curl -o- https://cdn.jsdelivr.net/gh/nvm-sh/nvm/install.sh | bash
# OR
wget -qO- https://cdn.jsdelivr.net/gh/nvm-sh/nvm/install.sh | bash

安装成功提示如下:

1
2
3
4
5
6
7
8
9
=> Downloading nvm as script to '/home/xxx/.nvm'

=> Appending nvm source string to /home/xxx/.bashrc
=> Appending bash_completion source string to /home/xxx/.bashrc
=> Close and reopen your terminal to start using nvm or run the following to use it now:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion

如果你使用zsh作为命令行解释器,需要注意nvm默认安装到了 .bashrc 中,我们需要把最后三行命令插入 .zshrc 最后并运行source ~/.zshrc

1
2
3
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion

nvm安装nodejs

nvm只需要一行命令就可以安装指定版本nodejs:

1
2
nvm install 12
# 即可安装 nodejs-v12 最新的stable版本

验证安装

1
2
3
4
5
# 查看nodejs版本
node -v

# 查看npm版本
npm -v

nvm Cheat Sheet

类别 命令 解释
基本命令 nvm –help 显示命令行帮助信息
nvm –version 打印输出已安装的nvm版本号
nvm deactivate 取消当前nvm命令行效果
下载和安装 nvm install [-s] 从源下载一个版本为的node.js
–reinstall-packages-from= 安装时重新安装最新版本已安装的包
–lts 安装时只选择LTS长期支持版本
–lts= 安装时选择指定的LTS版本
–skip-default-packages 安装时,跳过默认包文件(若存在)
–latest-npm 安装时,试图升级最新的npm版本
–no-progress 禁止任何下载进度条
卸载 nvm uninstall 卸载一个指定版本的node
nvm uninstall –lts 卸载长期支持版本的node
nvm uninstall –lts= 卸载一个指定名称的长期支持版本的node
切换 nvm use [–silent] 切换到指定版本的node
–lts 自动切换到长期支持版本
–lts= 自动切换到指定名称的node长期支持版本
查看 nvm current 查看当前使用的node版本
nvm ls 查看所有本地可用的node版本
nvm ls 参看指定版本
nvm ls-remote 查看所有可用远程版本
运行 nvm exec [–silent] [version] [] 运行命令
nvm run [–silent] [version] [] 以参数运行node

设置大陆代理镜像

我们都知道因为网络原因,大陆访问许多网站获取信息的速度很慢,镜像站应运而生。nodejs在大陆的镜像是淘宝团队负责维护的,镜像同步时间为10min。此外还可以选择使用cnpm,一种代替默认的 npm 的定制的命令行工具。

1
2
3
4
5
6
7
8
9
# 获取当前 npm 代理
npm get registry
# 返回 https://registry.npmjs.org/

# 设置淘宝镜像代理
npm config set registry http://registry.npm.taobao.org/

# 恢复 npm 代理
npm config set registry https://registry.npmjs.org/

如果我们需要提交自己的nodejs包,需要恢复npm代理。

Reference

  1. https://github.com/creationix/nvm
  2. https://developer.aliyun.com/mirror/NPM