gpt4 book ai didi

node.js - 在 Node 配置之前使用 dotenv 加载 ENV 变量

转载 作者:行者123 更新时间:2023-12-03 07:56:03 25 4
gpt4 key购买 nike

我想将环境变量加载到通用config我的 Express 应用程序。在本地,我使用 .env文件,但是在部署时,我会将环境变量注入(inject)到 docker 容器中。

所以,我有一个 default.json带有一些硬编码的配置值。然后我得到了custom-environment-variables.json像这样的文件:

  "app": {
"nodeEnv": "NODE_ENV",
"port": "PORT",
"hostname": "HOSTNAME"
}
"mongoDb": {
"connectionString": "MONGODB_CONNECTION_STRING"
},
"redis": {
"connectionString": "REDIS_CONNECTION_STRING"
},
"logDna": {
"key": "LOGDNA_KEY"
}

.env我项目的根目录中的文件。

在服务器启动文件中,我有:
import * as dotenv from 'dotenv';
dotenv.config();
import * as config from 'config';

console.log(process.env);
console.log(config);

我还尝试将它们按正常顺序放置:
import * as config from 'config';
import * as dotenv from 'dotenv';

dotenv.config();

我尝试的另一件事是将应用程序声明与服务初始化和应用程序启动分开。就像在 app.ts 中一样:
import * as App from 'express';
import * as dotenv from 'dotenv';

dotenv.config();
console.log(process.env);

const app = new App();
export app;

然后在 index.ts :
import app from './app';
import * as config from 'config';

console.log(config);

// app.use() and other inits
app.listen(...);

但无济于事。 .env文件已加载,我可以看到 process.env 中的变量,但它们不会被 config 加载在 custom-environment-variables.json . F.e. nodeEnv , porthostname变量被加载。但是它们在应用程序启动之前被加载到容器中。

这让我想到 configdotenv 之前加载模块设法从 .env 加载值文件。从本质上讲,这个问题似乎只存在于 DEV 环境中,因为这是我从 .env 加载环境变量的唯一地方。文件。对于任何其他环境,它们甚至会在应用程序启动之前出现在容器环境中。

我可以强制重新加载 config ?

有什么建议可以实现吗?

最佳答案

最终我解决了本地环境变量的外部加载,以及 Node 进程启动:
node --require=dotenv/config src/index.js
灵感来自 here .

关于node.js - 在 Node 配置之前使用 dotenv 加载 ENV 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58911497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com