节点dotenv文件未为测试环境加载

leo*_*ger 3 environment-variables node.js express

我有两个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);
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

我的服务器何时加载dotenv文件?如果我在testenv中运行,为什么我对那些process.env变量未定义?在我看来,此文件仅运行一次,当我更改NODE_ENV时,它不会更改要加载的文件。

简而言之:

我的开发dotenv正在工作,但是将其更改为testdotenv 时遇到了麻烦

Dan*_*.K. 8

请看一下dotenv-flow软件包。

该模块延伸dotenv添加有多个的能力.env*的文件等.env.development.env.test.env.production等,也允许定义的变量被覆盖单独在适当的.env*.local文件,它是由VCS未跟踪。

关于不建议使用多个环境文件的建议,dotenv-flow.env*在版本控制下管理文件的方法略有不同。请参阅“ 版本控制下文件”部分以了解此方法的动机。


小智 5

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

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

来自dotenv 文档

  • 那么如何在测试环境中加载 .env 呢? (16认同)