如何在Express.js中使用多个.env文件,例如.env.development

时间:2019-03-28 20:08:17

标签: node.js express environment-variables dotenv

我想为每种模式(开发,生产等)使用单独的.env文件。在处理vue.js项目时,我可以使用.env.development或.env.production之类的文件来获取同一env密钥的不同值。 (例如:在开发环境中,在.env.development中:FOO = BAR,在.env.production中:FOO =BAZ。env.FOO为BAR,在生产中为BAZ)。

我正在使用Express服务器,并希望使用这些相同类型的.env文件来存储端口,db uri,用户,pwd ...

我知道我可以像

一样编辑package.json中的脚本
"scripts": {
    "start": "NODE_ENV=development PORT=80 node ./bin/www",
    "start-prod": "NODE_ENV=production PORT=81 node ./bin/www"
  }

但是使用多个变量时会变得混乱。

我尝试使用dotenv,但似乎只能使用.env文件。不是.env.development和.env.production。

我可以使用dotenv软件包还是需要另一个软件包?还是我根本不用任何包装就能做到这一点?

4 个答案:

答案 0 :(得分:0)

  

我尝试使用dotenv,但似乎只能使用.env文件。不是.env.development和.env.production。

不正确-请参见path option

例如,require('dotenv').config({ path: `/path/to/.env.${process.env.NODE_ENV}` })

答案 1 :(得分:0)

我只是想为遇到问题的其他人添加此内容。以上两个答案都略有偏离。让我解释。上面的家伙必须使用路径,如

  • 第一个示例缺少./。./指示Node.js的当前目录。那就是为什么在第一个示例中,如果env文件不在PC的根目录中,它将永远找不到它。使用path可以避免麻烦,但是最好的方法是简单地添加./ 这说明计算机在我当前目录中查找该文件。
//this says hey computer look in my current directory for this file. 
 
require('dotenv').config({ path: `./.env.${process.env.NODE_ENV}` })


//I reccomend doing a console.log as well to make sure the names match*
console.log(`./.env.${process.env.NODE_ENV}`)

答案 2 :(得分:0)

我正在使用custom-env npm package处理多个.env文件。只需将其放在代码的顶部即可:

require('custom-env').env();

,它将从文件.env.X中加载环境变量,其中X是您NODE_ENV环境变量的值。例如:.env.test.env.production

Here是有关如何使用该软件包的不错的教程。

答案 3 :(得分:0)

dotenv 的官方文档不建议有多个 .env 文件。

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