如何在 node.js 中的 .env 文件中保存更改

Ehs*_*Ali 5 javascript environment-variables node.js

dotenv用于读取环境变量。像这样:

let dotenv = require('dotenv').config({ path: '../../.env' });
console.log(process.env.DB_HOST);
Run Code Online (Sandbox Code Playgroud)

现在我想保存.env文件中的更改。我找不到任何方法将变量保存在.env文件中。我该怎么办?

process.env.DB_HOST = '192.168.1.62';
Run Code Online (Sandbox Code Playgroud)

Rup*_*pam 10

更新:2021 年 8 月

无外部依赖

我一直在寻找类似的解决方案来读取和写入键/值到 .env 文件。我阅读了其他解决方案并编写了两个函数getEnvValuesetEnvValue简化读/写操作。

要使用getEnvValue,.env 文件的格式应如下所示(即=符号周围没有空格):

KEY_1="value 1"
KEY_2="value 2"
Run Code Online (Sandbox Code Playgroud)
KEY_1="value 1"
KEY_2="value 2"
Run Code Online (Sandbox Code Playgroud)


Abd*_*eem 6

.env 文件

VAR1=var1Value
VAR_2=var2Value
Run Code Online (Sandbox Code Playgroud)

index.js 文件

    const fs = require('fs') 
    const envfile = require('envfile')
    const sourcePath = '.env'
    console.log(envfile.parseFileSync(sourcePath))
    let parsedFile = envfile.parseFileSync(sourcePath);
    parsedFile.NEW_VAR = 'newVariableValue'
    fs.writeFileSync('./.env', envfile.stringifySync(parsedFile)) 
    console.log(envfile.stringifySync(parsedFile))
Run Code Online (Sandbox Code Playgroud)

最终的 .env 文件安装所需的模块并执行 index.js 文件

VAR1=var1Value
VAR_2=var2Value
NEW_VAR=newVariableValue
Run Code Online (Sandbox Code Playgroud)

  • 这是行不通的。从“envfile”导出的函数是“parse”和“stringify”(没有同步版本。)此外,“parse”需要文件内容,即。它本身不读取文件。 (2认同)

Cod*_*ing 6

不要将数据保存到.env文件中。

什么是.env文件?

'env' 代表环境变量。环境变量是基于 shell 的键值对,为正在运行的应用程序提供配置。

.env文件旨在提供在开发期间设置这些环境变量的简单机制(通常是因为开发人员机器不断重新启动,打开多个 shell,并且开发人员必须在需要不同环境变量的项目之间切换)。在生产中,这些参数通常由实际环境变量传递(在云配置中,通常比基于文件的解决方案更容易管理,并且可以防止将任何机密保存在磁盘上)

为什么不能修改环境变量?

环境变量可以在命令行修改,但是一旦启动正在运行的进程,它就不能/不会影响父进程的环境变量。如果您的程序退出并重新启动,所做的更改将会丢失。

为什么不能修改.env文件?

如果您在文件中设置一个值.env,则仅当同名的环境变量不存在时才会使用该值。如果是,则.env不会加载文件中该变量的值。

此外,在读取时,写入.env文件的任何更改都不会反映在应用程序中process.env,直到应用程序重新启动为止。

使用配置文件代替

配置文件只是包含配置的常规文件。它就像一个.env文件,但它不代表环境变量。更改它是安全的,并且在生产中使用也是安全的。

  • 问题是如何保存 env 文件,而不是使用 env 文件的最佳实践。从代码生成 env 文件是有充分理由的,例如引导开发环境。 (2认同)