繁体   English   中英

在节点配置之前使用 dotenv 加载 ENV 变量

[英]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 nodeEnvporthostname变量被加载。 但是它们在应用程序启动之前被加载到容器中。

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

我可以强制重新加载config吗?

有什么建议可以实现吗?

最终我解决了本地环境变量的外部加载,以及节点进程启动:

node --require=dotenv/config src/index.js

灵感来自这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM