Comment nodejs lit et écrit les fichiers .env?

Dec 11 2020

Comment lire et écrire des fichiers env?

Fichier original :

# I am a note ...
key1=value1

key2=value2
   # I am a note ...

J'ai besoin d'une fonction setEnv(key, value).

courir setEnv('key1', 'value2'), Laissez-le devenir :

# I am a note ...
key1=value2

key2=value2
   # I am a note ...

Comment puis-je y parvenir?

Réponses

2 GribeshDhakal Dec 11 2020 at 21:24

Commençons par créer un nouveau projet.

mkdir folder_name
cd folder_name
npm init

Ensuite, dans le répertoire de votre projet, installez «envfile» et «dotenv». La commande pour installer envfile est

npm install envfile --save

De même installer dotenv

npm install dotenv --save

package dotenv lit directement le fichier .env package envfile est utilisé pour analyser et stringifier le fichier selon les besoins. Créez un .envfichier dans le répertoire du projet avec vos détails.

# I am a note ...
key1=value1

key2=value2
   # I am a note ...

Créez un nouveau fichier avec filename.js

Après cela, pour obtenir et définir les variables d'environnement, vous pouvez utiliser le code suivant.

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');

Après cela, exécutez votre fichier en utilisant

node filename.js

Vous pouvez obtenir la sortie souhaitée.

Fichier .env initial

# I am a note ...
key1=value1

key2=value2
   # I am a note ...

Après avoir exécuté le programme

key1=value2
key2=value2

Oui, vos commentaires sont supprimés.

1 plc-dev Dec 11 2020 at 20:05

Vous pouvez utiliser le envfilemodule comme décrit ici .

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

Quelque chose comme ça:

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',
  ),
);

Mais cela ne fonctionne pas:

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