我想将环境变量加载到config
我的 Express 应用程序中。在本地我使用一个.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
文件已加载,我可以看到 in 的 vars ,process.env
但它们没有被config
in加载custom-environment-variables.json
。铁nodeEnv
和变量被加载port
。hostname
但是它们在应用程序启动之前被加载到容器中。
这让我想到,config
在dotenv
模块设法从.env
加载。从本质上讲,这个问题似乎只存在于 DEV 环境中,因为这是我从.env
文件中加载环境变量的唯一地方。对于任何其他环境,它们甚至会在应用程序启动之前出现在容器环境中。
我可以强制重新加载吗config
吗?
有什么建议可以实现吗?