将.env文件加载到pm2配置时遭遇模块找不到错误求助
问题描述
我已经参照网上所有示例操作,却无法让pm2配置正确加载Node服务器,持续收到错误:Error: Cannot find module 'dotenv/config'。
我的.env文件与Node服务器不在同一目录,已按官方文档创建ecosystem.config.js文件,内容如下:
module.exports = { apps : [{ name : "node-server-prod", script : "/my/absolute/path/server.js", cwd : "/my/absolute/path", node_args : "-r dotenv/config", args : "dotenv_config_path=relative/to/cwd/.env" }] }
我在args和script路径都尝试过绝对与相对路径,确认dotenv已安装在Node服务器目录,但未安装在执行pm2 start ecosystem.config.js的目录。
更新: 附上完整堆栈追踪:
解决方案
- 指定NODE_PATH指向服务目录的node_modules:在ecosystem.config.js中添加env配置,让Node能找到服务目录下的dotenv模块,同时建议把.env路径改成绝对路径避免歧义:
module.exports = { apps : [{ name : "node-server-prod", script : "/my/absolute/path/server.js", cwd : "/my/absolute/path", node_args : "-r dotenv/config", args : "dotenv_config_path=/绝对路径/到你的/.env文件", env: { NODE_PATH: "/my/absolute/path/node_modules" } }] } - 直接在服务代码中加载dotenv:去掉pm2配置里的
node_args和args,在server.js开头手动加载dotenv并指定.env路径:
修改后的ecosystem.config.js:// server.js 文件顶部添加 require('dotenv').config({ path: '/绝对路径/到你的/.env文件' });module.exports = { apps : [{ name : "node-server-prod", script : "/my/absolute/path/server.js", cwd : "/my/absolute/path" }] } - 在pm2执行目录安装dotenv:如果不想修改配置,也可以在运行
pm2 start命令的目录执行npm install dotenv,不过这种方法会产生冗余依赖,不推荐作为首选。
内容的提问来源于stack exchange,提问作者dmikester1
相关产品推荐
相关产品推荐

