【问题标题】:node dotenv files not loading for test env未为测试环境加载节点 dotenv 文件
【发布时间】:2018-05-11 06:40:40
【问题描述】:

我有两个 dotenv 文件,一个用于开发,另一个用于测试。

const dotenv = require('dotenv');

if (process.env && process.env.NODE_ENV) {
  dotenv.config({path: '.env.' + process.env.NODE_ENV});
} else {
  dotenv.config({path: '.env.development'});
}

const http = require('http');
const app = require('../src/app');

const port = parseInt(process.env.PORT, 10) || 8000;
app.set('port', port);

const server = http.createServer(app);
server.listen(port);

这是我的问题:

在我的情况下,服务器何时加载 dotenv 文件?如果我在test env 中运行,为什么这些 process.env 变量会出现未定义? 在我看来,这个文件只运行一次,当我更改 NODE_ENV 时,它不会更改要加载的文件。

简而言之:

我的开发 dotenv 正在运行,但是在将其更改为 test dotenv 时遇到了问题

【问题讨论】:

  • 应该可以。也许这就是您运行设置的方式。也许确保您在测试模式下运行时获得console.log('.env.' + process.env.NODE_ENV) 的正确路径?

标签: node.js express environment-variables


【解决方案1】:

请查看dotenv-flow 包。

这个模块扩展了dotenv,增加了拥有多个.env*文件的能力,如.env.development.env.test.env.production等,还允许在适当的.env*.local文件中单独覆盖定义的变量未被 VCS 跟踪。

关于反对拥有多个 env 文件的建议,dotenv-flow 在版本控制下管理 .env* 文件的方法略有不同。请参阅Files under version control 部分以了解这种方法的动机。

【讨论】:

    【解决方案2】:

    我应该有多个 .env 文件吗?

    没有。我们强烈建议不要使用“主” .env 文件和 “环境” .env 文件,如 .env.test。您的配置应该有所不同 在部署之间,您不应该在之间共享值 环境。

    来自dotenv documentation

    【讨论】:

    • 那么如何在测试环境中加载 .env 呢?
    • 对于那些试图在 jest 中使用 .env 文件中的项目的人,请遵循此。确保 .env 文件的路径来自测试文件的起点。您可能必须重新启动终端才能使更改生效。 stackoverflow.com/questions/61781150/…
    【解决方案3】:

    custom-env 也解决了这个问题,它允许不同环境的多个配置文件。 npm install custom-env。 您还可以指定在旅途中使用哪个.env 文件。 require('custom-env').env('test');.

    完整文档在这里:https://www.npmjs.com/package/custom-env

    【讨论】:

    • 还有很多其他的解决方案,问题是dotenv 特定的。
    猜你喜欢
    • 2017-07-09
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 2021-11-08
    • 2020-03-25
    • 2013-09-07
    相关资源
    最近更新 更多