[英]Load ENV vars with dotenv before node-config
我想将环境变量加载到我的 Express 应用程序的常规config
中。 在本地我使用.env
文件,但在部署时,我会将环境变量注入 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
中看到变量,但它们没有被custom-environment-variables.json
中的config
加载。 Fe nodeEnv
, port
和hostname
变量被加载。 但是它们在应用程序启动之前被加载到容器中。
这让我想到在dotenv
模块设法从.env
文件加载值之前加载config
。 从本质上讲,这个问题似乎只存在于 DEV env 中,因为这是我从.env
文件加载环境变量的唯一地方。 对于任何其他环境,它们甚至会在应用程序启动之前出现在容器环境中。
我可以强制重新加载config
吗?
有什么建议可以实现吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.