尝试将 .env 文件加载到 pm2 配置中 - 出现错误

问题描述 投票:0回答:1

我已经遵循了我在网上可以找到的每个示例,但无法让我的 pm2 配置正确加载我的节点服务器。我不断收到错误:

Error: Cannot find module 'dotenv/config' 
。我的 .env 位于与节点服务器不同的位置。我按照他们的文档创建了 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 部分尝试了绝对路径和相对路径。与脚本路径相同。

我知道我的节点服务器路径中安装了 dotenv。它没有安装在我的

ecosystem.config.js
文件所在的目录以及我正在调用的目录中:
pm2 start ecosystem.config.js
。我几乎可以肯定它不需要安装在该目录中。任何帮助将不胜感激。

node.js environment-variables pm2
1个回答
0
投票

您遇到的错误 Error: Cannot find module 'dotenv/config' 表示当 PM2 尝试预加载 dotenv 时(按照 Ecosystem.config.js 中的 -r dotenv/config 节点参数的指示),它无法找到 dotenv 模块。这通常是因为 dotenv 未安装在预期位置或 PM2 运行的环境无法访问它。以下是排查和解决此问题的几个步骤:

确保 dotenv 已安装在您的 Node.js 项目中

首先,确认 dotenv 确实安装在 server.js 所在的位置。如果您不确定,您可以通过导航到项目的根目录(server.js 所在的位置)并运行来重新安装它:

npm install dotenv

对 dotenv_config_path 使用绝对路径

虽然您提到尝试绝对路径和相对路径,但路径正确且可从启动 PM2 的位置访问至关重要。鉴于相对路径不起作用,请尝试为 dotenv_config_path 指定绝对路径。修改 Ecosystem.config.js 中的 args 行以使用绝对路径:

args: "dotenv_config_path=/absolute/path/to/.env"

在您的脚本中直接需要 dotenv

作为替代方法,如果 PM2 预加载方法仍然给您带来麻烦,您可以直接在 server.js 脚本中加载 .env 文件。此方法很简单,并且可以确保无论应用程序如何启动,都会加载环境变量。在 server.js 的最顶部添加:

require('dotenv').config({ path: '/absolute/path/to/.env' });

检查全局与本地 PM2 安装

如果PM2是全局安装的(这很常见),请确保dotenv也可用于该全局环境,或者确保PM2启动的节点进程可以访问安装dotenv的本地node_modules目录。全局和本地安装之间的差异有时会导致找不到模块。

© www.soinside.com 2019 - 2024. All rights reserved.