51

我想为每种模式(开发、生产等)使用单独的 .env 文件。在处理我的 vue.js 项目时,我可以使用类似.env.development.env.production为同一个 env 键获取不同值的文件。(例如:在 .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 包还是需要另一个包?或者我可以在没有任何包裹的情况下做到这一点吗?

4

5 回答 5

103

You can specify which .env file path to use via the path option with something like this:

require('dotenv').config({ path: `.env.${process.env.NODE_ENV}` })
于 2019-03-29T23:18:47.490 回答
7

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

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

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

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

于 2020-12-18T04:04:22.573 回答
5

我只是想为其他有问题的人添加这个。以上两个答案都略有偏差。让我解释。上面的人必须使用路径,如

  • 第一个示例缺少 ./ ./ 表示 Node.js 的当前目录。这就是为什么在第一个示例中,如果 env 文件不在 PC 的根目录中,它将永远找不到它。使用路径是一个令人讨厌的工作,但最好的方法是简单地添加一个 ./ 这说"hey computer look in my current directory for this file"
//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}`)
于 2020-07-17T21:45:44.463 回答
1

从上面的答案:这是对我有用的最终结果。

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

import path from 'path';

dotenv.config({ path: path.join(__dirname, `./.env.${process.env.NODE_ENV}`)});
于 2022-01-17T11:43:15.553 回答
-1

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

我应该有多个 .env 文件吗? 不。我们强烈建议不要有一个“主”.env 文件和一个“环境”.env 文件,如 .env.test。你的配置应该在部署之间有所不同,你不应该共享环境之间的值。”

于 2021-02-07T15:32:57.300 回答