0

我正在使用 dotenv 加载 env 变量并在我的 mocha 测试中使用。但是基于为现有环境变量之一生成新令牌值的函数,我希望能够将其值一般更新为 .env 文件。可能吗?

testSpec.js:

require('dotenv').config()
const webapi = require('../libs/webapi')

async function getVal() {
//to generate a new token using existing one
token = webapi.generate( process.env.BASE_URI, process.env.C_KEY, process.env.AUTH_TOKEN)
token.then(response => {
        obj = JSON.parse(response.body)
        authToken = obj.auth_token
})
}

.env :

BASE_URI= https://www.smthing.com
C_KEY=12456704-fedrfg1-7840-00002345
AUTH_TOKEN=75638391-9c5c-d690-4fd53456

从 testSpec.js generate() 生成我正在解析的新令牌值,即;授权令牌;我想在 AUTH_TOKEN var 的 .env 文件中进行一般更新,以代替其先前的值。是否可以通过某些库写入/更新到 .env 以获取其更新值?我是 nodejs 的新手并使用 npm 包,任何帮助表示赞赏。

4

2 回答 2

2

这是一种可能可以解决您正在尝试做的事情的方法:

    const fs = require('fs');
    const envItems = ['BASE_URI', 'C_KEY', 'AUTH_TOKEN'];
    function updateEnv(items = [], eol = '\n'){
      const envContents = items
        .map(item => `${item}=${process.env[item]}`)
        .join(eol)
      fs.writeFileSync('.env', envContents);
    }

在设置 auth_token 的部分,您将更新环境变量和.env文件:

process.env.AUTH_TOKEN = obj.auth_token;
updateEnv(envItems);
于 2019-04-13T03:08:10.407 回答
0

另一个答案很好,但它需要在 .env 中手动添加所有现有密钥,否则它们将在更新的文件中被删除。这是我的版本:

updateEnv.js

const dotenv = require('dotenv')
const fs = require('fs')
const env = fs.readFileSync('.env')
const buf = Buffer.from(env)
const currentConfig = dotenv.parse(buf)

function updateEnv(config = {}, eol = '\n'){
  const envContents = Object.entries({...currentConfig, ...config})
    .map(([key,val]) => `${key}=${val}`)
    .join(eol)
  fs.writeFileSync('.env', envContents);
}

module.exports = updateEnv

调用文件.js

  const updateEnv = require('./updateEnv.js')

  const envUpdate = {
    'API_KEY': 'abcdefg'
  }

  updateEnv(envUpdate)
于 2021-11-22T00:48:01.133 回答