十里平湖霜满天,寸寸青丝愁华年。
对月形单望相护,只羡鸳鸯不羡仙。
——《倩女幽魂》阮继志
因为最近跳出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 | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash |
如果遇到(大陆)网络环境问题,有时链接GitHub发生connection failed之类的问题,可以采用jsDelivr CDN代理脚本,命令如下:
1 | curl -o- https://cdn.jsdelivr.net/gh/nvm-sh/nvm/install.sh | bash |
安装成功提示如下:
1 | => Downloading nvm as script to '/home/xxx/.nvm' |
如果你使用zsh作为命令行解释器,需要注意nvm默认安装到了 .bashrc
中,我们需要把最后三行命令插入 .zshrc
最后并运行source ~/.zshrc
。
1 | export NVM_DIR="$HOME/.nvm" |
nvm安装nodejs
nvm只需要一行命令就可以安装指定版本nodejs:
1 | nvm install 12 |
验证安装
1 | 查看nodejs版本 |
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] [ |
在 |
设置大陆代理镜像
我们都知道因为网络原因,大陆访问许多网站获取信息的速度很慢,镜像站应运而生。nodejs在大陆的镜像是淘宝团队负责维护的,镜像同步时间为10min。此外还可以选择使用cnpm,一种代替默认的 npm 的定制的命令行工具。
1 | 获取当前 npm 代理 |
如果我们需要提交自己的nodejs包,需要恢复npm代理。
Reference
- https://github.com/creationix/nvm
- https://developer.aliyun.com/mirror/NPM