node.js - 在节点配置之前使用 dotenv 加载 ENV 变量
问题描述
我想将环境变量加载到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
吗?
有什么建议可以实现吗?
解决方案
推荐阅读
- r - 如何在r中获取数据框中重复值的下一个元素?
- firefox - 之前设置的“Samesite: Strict”cookie 在 document.cookie Firefox 和 Safari 中不可用
- r - 如何根据特定变量的变化删除观察结果?
- sql-server - 搜索以确定一个表中的键值是否永远不会与另一表中的键值匹配
- css - Joomla Jform 单选按钮未与其标签水平对齐
- javascript - 为什么你不能 Array.prototype.pop.call() 一个字符串?
- c++ - 如何在二维数组的末尾添加列和行?
- java - 我可以在短时间内找到合适的 MirrorAnnotation 吗?
- scala - 有没有办法将文件加载到目录中并能够在处理后将其删除
- sql-server - SSIS 无法获取连接。连接可能未正确配置,或者您可能对此连接没有正确的权限