web-dev-qa-db-fra.com

Node process.env.VARIABLE_NAME renvoyant undefined

J'utilise des variables d'environnement sur mon Mac pour stocker des informations d'identification sensibles et j'essaie d'y accéder via Node. Je les ai ajoutés à mon profil d’environnement avec

export VARIABLE_NAME=mySensitiveInfo

Lorsque j'utilise echo $VARIABLE_NAME, je reçois le bon résultat (mes informations sensibles). 

Cependant, lorsque j'essaie d'accéder à cette même variable dans Node avec process.env.VARIABLE_NAME et d'essayer de l'imprimer sur la console, je reçois un indéfini. 

Les autres variables d'environnement semblent toutefois convenir. Par exemple, lorsque je console.log(process.env.FACEBOOK_CALLBACK_URL), il affiche la valeur correcte sur ma console. J'ai ajouté FACEBOOK_CALLBACK_URL il y a quelques jours.

Dois-je redémarrer ma machine ou autre chose? Est-ce que cela prend un certain temps avant que les variables d'environnement deviennent disponibles dans Node? La réponse la plus proche que j'ai vue sur SO est ce message , mais personne n'a pu comprendre pourquoi cela se produisait.

12
Yu Chen

process.env.VARIABLE_NAME renvoie undefined car l'environnement d'exécution Node.js ne connaît pas encore le VARIABLE_NAME ajouté. Pour résoudre le problème, l'environnement d'exécution Node.js (par exemple, IDE) doit redémarrer.

Les étapes suivantes peuvent être utilisées pour reproduire ce problème:

  1. Ouvrez IDE, par exemple WebStorm, et écrivez un programme simple Node.js: console.log(process.env.VARIABLE_NAME). Il imprimera undefined comme prévu, car VARIABLE_NAME n'est pas encore défini. Laissez le IDE en marche, ne le fermez pas.
  2. Profil d’environnement ouvert tel que .bash_profile et ajoutez export VARIABLE_NAME=mySensitiveInfo dans celui-ci.
  3. Ouvrez la console système et exécutez source .bash_profile, de sorte que l'instruction export ci-dessus soit exécutée. Désormais, chaque fois que la console système est ouverte, la variable d’environnement VARIABLE_NAME existe.
  4. Dans la console système, exécutez le programme Node.js à l’étape 1, il affichera mySensitiveInfo.
  5. Basculez vers IDE et exécutez le programme Node.js. Il imprimera undefined.
  6. Redémarrez le IDE et exécutez le programme Node.js. Cette fois, il affichera mySensitiveInfo
14
shaochuancs

J'ai un problème tout à l'heure, et je l'utilise résolu dans la configuration de webpack

const plugins = [
    new webpack.NoEmitOnErrorsPlugin(),
    // after compile global will defined `process.env` this Object
    new webpack.DefinePlugin({
      BUILD_AT : Date.now().toString(32),
      DEBUG: process.env.NODE_ENV !== 'production',
          'process.env': {
              'NODE_ENV': JSON.stringify(process.env.NODE_ENV || "development"),
              'VARIABLE_NAME': JSON.stringify(process.env.VARIABLE_NAME)
     }
   })
]
0
kingzez