我想将环境变量加载到Express应用程序的常规config
中。我在本地使用.env
文件,但是在部署时,我会将env vars注入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
中看到var,但是config
中的custom-environment-variables.json
无法加载它们。 F.e. nodeEnv
,port
和hostname
变量已加载。但是它们是在应用程序启动之前加载到容器中的。
这使我想到在config
模块设法从dotenv
文件加载值之前先加载.env
。从本质上讲,似乎该问题只会在DEV env中存在,因为这是我将从.env
文件加载环境变量的唯一位置。对于任何其他环境,它们甚至会在应用启动之前出现在容器环境中。
我可以强制重新加载config
吗?
任何建议如何实现这一目标?
答案 0 :(得分:0)