nodejs가 .env 파일을 읽고 쓰는 방법?

Dec 11 2020

env 파일을 읽고 쓰는 방법?

원본 파일 :

# I am a note ...
key1=value1

key2=value2
   # I am a note ...

기능이 필요합니다 setEnv(key, value).

실행 setEnv('key1', 'value2'),하자 :

# I am a note ...
key1=value2

key2=value2
   # I am a note ...

어떻게 할 수 있습니까?

답변

2 GribeshDhakal Dec 11 2020 at 21:24

새 프로젝트를 생성하여 시작하겠습니다.

mkdir folder_name
cd folder_name
npm init

그런 다음 프로젝트 디렉토리에 'envfile'과 'dotenv'를 설치하십시오. envfile 설치 명령은 다음과 같습니다.

npm install envfile --save

마찬가지로 dotenv를 설치하십시오.

npm install dotenv --save

패키지 dotenv는 .env 파일을 직접 읽습니다. 패키지 envfile은 필요에 따라 파일을 구문 분석하고 문자열 화하는 데 사용됩니다. .env세부 정보를 사용하여 프로젝트 디렉토리에 파일을 만듭니다 .

# I am a note ...
key1=value1

key2=value2
   # I am a note ...

다음을 사용하여 새 파일 만들기 filename.js

그 후 env 변수를 가져오고 설정하기 위해 다음 코드를 사용할 수 있습니다.

const fs = require('fs');
require('dotenv').config()
const {
    parse,
    stringify
} = require('envfile');
const pathToenvFile = '.env';

/**
 * 
 * @param {string} key 
 * //Function to get value from env
 */
function getEnv(key) {
    console.log("Getting value of " + key);
    console.log(process.env[key]);
}
//Calling the function getEnv
getEnv("key1");


/**
 * 
 * @param {string} key 
 * @param {string} value 
 * //Function to set environment variables.
 */
function setEnv(key, value) {
    fs.readFile(pathToenvFile, 'utf8', function (err, data) {
        if (err) {
            return console.log(err);
        }
        var result = parse(data);
        result[key] = value;
        console.log(result);
        fs.writeFile(pathToenvFile, stringify(result), function (err) {
            if (err) {
                return console.log(err);
            }
            console.log("File Saved"); // Can be commented or deleted
        })

    });
}
//Calling the function setEnv
setEnv('key1', 'value2');

이 후 다음을 사용하여 파일을 실행하십시오.

node filename.js

원하는 출력을 얻을 수 있습니다.

초기 .env 파일

# I am a note ...
key1=value1

key2=value2
   # I am a note ...

프로그램 실행 후

key1=value2
key2=value2

네 댓글이 삭제됩니다.

1 plc-dev Dec 11 2020 at 20:05

여기에envfile 설명 된대로 모듈을 사용할 수 있습니다 .

const fs = require('fs');
const envfile = require('envfile');
const envPath = 'pathToEnvFile/.env';
let parsedFile = envfile.parseFileSync(envPath);
parsedFile.NEW_VAR = 'newVariableValue';
fs.writeFileSync(envPath, envfile.stringifySync(parsedFile));
ebyte Dec 11 2020 at 20:17

이 같은:

function setEnv(envText, key, value) {
  if (!envText) {
    return;
  }
  const rp = new RegExp(`${key}=(.*?)\\s`); let result = envText.replace(rp, (m, $1) => {
    return m.replace($1, value); }); if (!rp.test(result)) { result += `\n${key}=${value}`;
  }
  return result;
}

console.log(
  setEnv(
    `# I am a note ...
  key1=value1
  
  key2=value2
     # I am a note ...`,
    'key1',
    'value2',
  ),
);

그러나 이것은 작동하지 않습니다.

setEnv(
    `# I am a note ...
  key1=value1
  
  key2=value2`,
    'key2',
    'value1',
  )
setEnv(
    `# I am a note ...
  key1key2=value1
  
  key2=value2`,
    'key2',
    '2222',
  )