Node JS永远加载dotenv



我想问一下是否有人知道如何永远运行可以加载.env文件。

目前,如果我们运行forever start app.js,process.env.foo变得未定义。

TLDR,您需要将--workingDir路径添加到您的 cronjob 行中。

forever -c "node -r dotenv/config" --workingDir app-workdir-path start app.js

以前的许多答案,但没有一个真正解决这个特定的用例。

要使用dotenv永远运行,您需要做两件事。

首先,我们需要使用 dotenv 的预加载功能,这意味着我们需要永远将节点参数传递给进程。 我们可以通过使用 Forever 拥有的-c COMMAND标志来做到这一点。

第二件事与dotenv包的工作方式有关。 以下是源代码中的片段:

let dotenvPath = path.resolve(process.cwd(), '.env')

process.cwd()做什么?

process.cwd() 方法是进程模块的内置应用程序编程接口,用于获取节点.js进程的当前工作目录。

这意味着dovenv包想要从工作目录加载.env文件。 因此,要解决此问题,我们可以使用 Forever's--workingDir标志来指定进程的实际工作目录。

最终命令将如下所示:

forever -c "node -r dotenv/config" --workingDir app-workdir-path start app.js

其中app-workdir-path是项目目录的绝对路径。

对我有用的是指定完整路径:

require('dotenv').config({ path: '/opt/api/.env' });

您可以使用 dotenv 包来实现此目的。在应用条目上执行此操作

require('dotenv').config({ path: '.env' })

如果您在项目的根目录中添加了.env文件,那么您可以像这样使用require('dotenv').config()

或者,如果您使用不同的位置创建了文件.env则在代码中使用require('dotenv').config({path : '/your/path/.env'})

我发现了你的问题,但遇到了同样的问题。我不认为dotenv永远有效 - 至少不是我能够开始工作。但是,我认为您可以使用一种解决方法。我能够在 forever 命令之前的命令行上指定环境变量,并将这些环境变量永久传递给我的节点应用程序。

~$ ENV=production forever start yourApp.js

有关在命令行上指定环境变量的更多信息,请查看此堆栈溢出问题。

我在多服务器永久配置中遇到了这个问题。

您应该包含指向项目目录根目录--workingDir参数,以防您在根目录中包含.env文件并使用 dotenv

例:

  • 具有最小"硬编码"值的灵活配置
  • 放置在根目录中的.env
  • dotenv.config()形式使用的"DOTENV"

一台服务器情况下的多服务器配置代码:

const fs = require('fs');
const path = require('path');
let foreverConfig = [
{
uid: 'scheduledJobsServer',
append: true,
watch: true,
script: 'scheduledJobsServer.js',
sourceDir: path.join(__dirname, '/server'),
workingDir: path.join(__dirname)
},
{
uid: 'mainServer',
append: true,
watch: true,
script: 'server.js',
sourceDir: path.join(__dirname, '/server'),
workingDir: path.join(__dirname)
}
];
try {
fs.writeFileSync(
path.join(__dirname, '/foreverConfig.json'),
JSON.stringify(foreverConfig),
{ encoding: 'utf8' }
);
let consoleMessage = 'Init script success';
console.log('x1b[42m%sx1b[0m', consoleMessage);
} catch (e) {
console.log('Init script error:', e);
process.exit(1);
}

然后运行forever start foreverConfig.json

有时您必须从另一个目录调用节点脚本。例如,在运行 cron 作业时。以下是您可以执行的操作:

cd /path/to/script/ && /usr/bin/forever start /usr/bin/node script.js

现在将加载 .env 文件。

对我来说最简单的命令是

dotenv -e .env forever start build/index.js

最新更新