在多个 .env 文件之间切换,例如 .env.development 和 node.js

Toggle between multiple .env files like .env.development with node.js

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

我在 Express 服务器上工作,想使用这些相同类型的 .env 文件来存储端口、db uri、用户、密码...

我知道我可以像这样编辑 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 包还是需要另一个包?或者我可以在没有任何包裹的情况下做到这一点吗?

您可以通过 path option 指定要使用的 .env 文件路径,如下所示:

require('dotenv').config({ path: `.env.${process.env.NODE_ENV}` })

我只是想为遇到问题的其他人添加此内容。无需获取额外的 npm 包,例如自定义 env。作为一名安全研究员,我建议避免使用额外的 NPM 模块,尤其是那些处理 secrets/env 变量的模块。

以上两个答案都略有偏差。让我解释。下面 KyleMit 的回答缺少 ./ 以指示当前目录。

  • ./ 表示 Node.js 中的当前目录。第二 。在 env 之前表示一个 hidden/private 文件。这就是为什么在 KyleMits 的回答中,如果 env 文件不在 PC 的根目录中,它将永远找不到它。在我看来,最简单的方法是添加一个 ./ 这表示 "hey computer look in my current directory for this file".
//look in my current directory for this  hidden file. 
// List hidden files in dir: ls -a
 
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}`)

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

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

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

Here 是一个关于如何使用这个包的很好的教程。

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

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

来自上面的回答: 这是对我有用的最终结果。

.env.dev src 目录中的文件。

import path from 'path';

dotenv.config({ path: path.join(__dirname, `./.env.${process.env.NODE_ENV}`)});