1. 使用 n 与 nvm 管理 node 版本
1.1 n
n 是一个需要全局安装的 npm package。
这意味着,我们在使用 n 管理 node 版本前,首先需要一个 node 环境。我们或者用 Homebrew 来安装一个 node,或者从官网下载 pkg 来安装,总之我们得先自己装一个 node —— n 本身是没法给你装的。
然后我们可以使用 n 来安装不同版本的 node。
在安装的时候,n 会先将指定版本的 node 存储下来,然后将其复制到我们熟知的路径 /usr/local/bin
,非常简单明了。当然由于 n 会操作到非用户目录,所以需要加 sudo
来执行命令。
所以这样看来,n 在其实现上是一个非常易理解的方案。
引用:https://fed.taobao.org/blog/taofed/do71ct/nvm-or-n/?spm=taofed.homepage.header.7.7eab5ac8a3p43I
安装:
1 | $ npm install -g n |
下载完成后就可以使用 n
来安装指定版本的 node:
1 | $ n 版本号 |
下载最新版本:
1 | $ n latest |
删除某个版本:
1 | $ n rm 4.4.4 |
查看当前 node 版本:
1 | $ node -v |
切换版本:
1 | $ n |
以指定的版本来执行脚本:
1 | $ n use 7.4.0 index.js |
获取某个 node 版本的 bin 文件目录:
1 | $ n bin 8.17.0 |
1.2 nvm
不同于 n,nvm 不是一个 npm package,而是一个独立软件包。
我们可以使用 nvm 来安装不同版本的 node。
在安装的时候,nvm 将不同的 node 版本存储到 ~/.nvm/<version>/
下,然后修改 $PATH
,将指定版本的 node 路径加入,这样我们调用的 node
命令即是使用指定版本的 node。
nvm 显然比 n 要复杂一些,但是另一方面,由于它是一个独立软件包,因此它和 node 之间的关系看上去更合乎逻辑:nvm 不依赖 node 环境,是 node 依赖 nvm;而不像 n 那样产生类似循环依赖的问题。
同时由于 nvm 是通过修改系统 PATH 来切换全局的 node 版本,因此如果系统使用了 nvm 来管理 node 版本,n 的管理就会失效。
nvm 基础指令:
1 | $ nvm -h //查看nvm的指令 |
nvm use
仅能指定当前的 node 版本,并不能将其指定为默认的 node 版本,可以通过以下方法设置默认的 node 版本:
1 | nvm alias default v13.7.0 |
2. PM2 管理 node 应用
pm2(process manager)是一个进程管理工具,维护一个进程列表,可以用它来管理你的node进程,负责所有正在运行的进程,并查看node进程的状态,也支持性能监控,负载均衡等功能。
使用pm2管理的node程序的好处:
- 监听文件变化,自动重启程序
- 支持性能监控
- 负载均衡
- 程序崩溃自动重启
- 服务器重新启动时自动重新启动
- 自动化部署项目
2.1 PM2 基础使用
安装:
1 | $ npm install pm2 -g |
启动一个node程序:
1 | pm2 start start.js --name test-app |
查看运行列表:
1 | pm2 list |
删除进程:
1 | // pm2 delete [appname] | id |
查看某个进程具体情况:
1 | $ pm2 describe app |
查看进程的资源消耗情况:
1 | $ pm2 monit |
重启进程:
1 | $ pm2 restart app // 重启指定名称的进程 |
设置pm2开机自启:
开启启动设置,此处是CentOS系统,其他系统替换最后一个选项(可选项:ubuntu, centos, redhat, gentoo, systemd, darwin, amazon)
1 | $ pm2 startup centos |
保存设置
1 | pm2 save |
2.2 PM2 指定不同的 node 版本
pm2 指令有一个选项为 --interpreter
,可以通过该选项指定 node 的位置,配合 n 模块的 n bin [node-version]
指令可以来获取不同版本 node 的路径:
1 | pm2 -f start index.js --interpreter `n bin 8.17.0` |