全局模块 MODULE_NOT_FOUND 如果从 pm2 启动

Global module MODULE_NOT_FOUND if started from pm2

我全局安装了 emailjs 包。我的 NODE_PATH 正确显示了来自 npm -g root 的值:/usr/lib/node_modules。在 Node REPL 中,以下命令可以从任何文件夹无错误地运行:

var email = require("emailjs/email");

但是,在通过 pm2 启动的节点脚本中,var email = require("emailjs/email") 导致 MODULE_NOT_FOUND:

Error: Cannot find module 'emailjs/email'

可能发生了什么?

在大多数情况下(像这样)它取决于PM2。试试这个:

sudo pm2 update

不知何故,pm2 的环境冻结在最初 运行 时的状态。我的第一个应用程序没有设置 NODE_PATH 参数。它只是后来设置的。因此,即使环境设置了 NODE_PATH 参数,pm2 也看不到它。

因此,需要使用--update-env选项启动新应用。