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

xqnpmsa8  于 2023-02-15  发布在  Node.js
关注(0)|答案(7)|浏览(285)

我想为每种模式(开发、生产等)使用单独的.env文件。在处理vue.js项目时,我可以使用.env.development.env.production等文件为同一个env键获取不同的值。(例如:环境发展:FOO=BAR和环境生产中:FOO=BAZ,在开发模式过程中。env。FOO将是BAR,在生产中,i将是BAZ)。
我正在一个Express服务器上工作,希望使用这些相同类型的.env文件来存储端口、dburi、用户、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包吗?或者我需要另一个包吗?或者我可以完全不使用任何包来做这个吗?

iklwldmw

iklwldmw1#

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

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

rfbsl7qr2#

以上两个答案都有点不对。让我解释一下。下面的KyleMit的答案缺失。/表示当前目录。

  • ./表示Node.js中的当前目录。env之前的第二个.表示隐藏/私有文件。这就是为什么在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}`)
lzfw57am

lzfw57am3#

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

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

它将从文件.env.X加载环境变量,其中X是NODE_ENV环境变量的值。例如:.env.test.env.production
Here是一个关于如何使用这个包的很好的教程。

mbyulnm0

mbyulnm04#

根据上述答复:这是对我有效的最终结果。
源env.dev目录中的. www.example.com文件。

import path from 'path';

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

xmq68pz95#

对于 typescript :

import dotenv from 'dotenv'
dotenv.config({ path: `.env.${process.env.NODE_ENV}` })
qhhrdooz

qhhrdooz6#

安装dotenv软件包:

npm install dotenv

我们需要基于NODE_ENV获取.env文件名,它可能未定义,将默认值设置为development

const envFileName = `.env.${process.env.NODE_ENV || "development"}`

导入并使用dotenv包:

dotenv.config({ path: envFileName });
vu8f3i0k

vu8f3i0k7#

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

  • 我是否应该有多个.env文件?* 不。强烈建议不要有一个“main”.env文件和一个“environment”.env文件,如.env.test。您的配置应随部署而异,并且不应在环境之间共享值。

相关问题