首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在node-config之前使用dotenv加载ENV变量

在node-config之前使用dotenv加载ENV变量
EN

Stack Overflow用户
提问于 2019-11-18 17:30:53
回答 1查看 1K关注 0票数 5

我想要将环境变量加载到我的Express应用程序的通用config中。在本地,我使用.env文件,但在部署时,我会将env变量注入到docker容器中。

因此,我得到了一个带有一些硬编码配置值的default.json。然后我得到了custom-environment-variables.json文件,如下所示:

代码语言:javascript
复制
  "app": {
    "nodeEnv": "NODE_ENV",
    "port": "PORT",
    "hostname": "HOSTNAME"
  }
  "mongoDb": {
    "connectionString": "MONGODB_CONNECTION_STRING"
  },
  "redis": {
    "connectionString": "REDIS_CONNECTION_STRING"
  },
  "logDna": {
    "key": "LOGDNA_KEY"
  }

和我的项目根目录中的一个.env文件。

在服务器初始化文件中,我得到:

代码语言:javascript
复制
import * as dotenv from 'dotenv';
dotenv.config();
import * as config from 'config';

console.log(process.env);
console.log(config);

我还试着按正常顺序放置它们:

代码语言:javascript
复制
import * as config from 'config';
import * as dotenv from 'dotenv';

dotenv.config();

我尝试的另一件事是将app声明与服务init和app start分开。就像在app.ts中一样

代码语言:javascript
复制
import * as App from 'express';
import * as dotenv from 'dotenv';

dotenv.config();
console.log(process.env);

const app = new App();
export app;

然后在index.ts

代码语言:javascript
复制
import app from './app';
import * as config from 'config';

console.log(config);

// app.use() and other inits
app.listen(...);

但无济于事。.env文件已加载,我可以在process.env中看到var,但custom-environment-variables.json中的config不会加载它们。F.e.加载nodeEnvporthostname变量。但是它们在应用程序启动之前被加载到容器中。

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

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

如何实现这一点有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-18 22:51:25

最终,我决定在节点进程启动的同时,从外部加载本地环境变量:

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

来自here的灵感。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58911497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档