【bug日志】pm2 进程的 nodejs 版本落后导致的错误

时间：2023.12.17

问题：在开发一个 discord bot 的时候，在服务器端遇到了
Error: Cannot find module 'readline/promises' 的错误。但是本地并没有报错。

解决过程

readline/promises 是 bot 的一个依赖 elephant-sdk 使用的库。根据这个搜索结果，初步认为可能和 nodejs 版本有关。

检查服务端的 nodejs 版本为 v16.19.1，怀疑是服务端的 nodejs 版本太低导致的错误。

Copy
root@nunti-bot:~# node -v
v16.19.1

通过 nvm 把 nodejs 升级到 v21.4.0。但是 bot 的错误仍然存在

尝试最小化复现错误。在 Node.js REPL（交互式解释器）中运行代码：
const readline = require('readline/promises');
并没有出错。

单独下载 elephant sdk，使用 npm 安装依赖（和 bot 相同的包管理器），运行仓库自带的 example.ts，也可以正常运行。

至此有点没有头绪。搁置许久，晚上睡前突然间意识到之前测试的时候重启 bot 一直依靠的是 pm2 重启。而 pm2 很可能还是使用的旧的 nodejs 版本。为了验证猜想，使用 pm2 show 'app-name' 查看，果然发现返回结果中其中一行：│ node.js version │ 16.19.1。

根据这个搜索结果，升级 pm2 及重启 pm2 进程：
Copy
pm2 update
pm2 restart app --update-env

然后再使用一遍 pm2 show检查一遍，发现这次 nodejs 版本终于升级成功了。再测试一遍 bot，成功。