2015-09-11 16 views
5

Sto provando a impostare una variabile di ambiente globale fuori dalla mia app node.js.Imposta la variabile di ambiente globale da Node.js

Gli obiettivi sono:

  1. Quando riavvio del APP, la variabile di ambiente deve ancora essere impostato
  2. Quando si apre una nuova shell, dovrebbe essere utilizzabile
  3. Se possibile: Quando riavvio, uguale 1.
  4. dovrebbe funzionare su Linux, Mac OS X (e ha bisogno di un comando SET alternativo per finestre)

Ecco cosa Ho fatto:

var setEnv = require('child_process') 
     .spawn('export GLOBALVARNAME='+my.value,{ 
      stdio: 'inherit', 
      env: process.env 
     }); 

Ma questo fa sì che in

{ [Error: spawn export GLOBALVARNAME=foobar ENOENT] 
    code: 'ENOENT', 
    errno: 'ENOENT', 
    syscall: 'spawn export GLOBALVARNAME=foobar', 
    path: 'export GLOBALVARNAME=foobar', 
    spawnargs: [] } 

non ho la prova questo su Windows, ma su Mac OS X (e Linux) il comando a destra in bash è export GLOBALVARNAME=value. Per Windows il comando corretto dovrebbe essere SET GLOBALVARNAME=value - non è vero?

Quindi la domanda principale è: cosa sta andando male con il lavoro manuale export GLOBALVARNAME=foobar?

+0

per capire il motivo per cui si sta dando 'ENOENT' controllare http: // StackOverflow.it/questions/19902828/why-does-enoent-mean-no-such-file-or-directory – chicks

risposta

3

export non è un comando standalone ma una shell incorporata che imposta la variabile di ambiente per il processo di shell corrente e i suoi figli biforcati dopo che è stato impostato.

Non è possibile impostare una variabile di ambiente per i processi che non sono discendenti del processo corrente. E sotto Linux, non esiste una variabile d'ambiente di sistema.

Sotto Linux, la variabile deve essere impostata nello script di init che genera l'app o nell'unità systemd. Se si desidera che sia disponibile nelle shell utente interattive, deve essere impostato su /etc/profile o /etc/profile.d

.

+0

Ho pensato che fosse un comando standalone ... che male. Quindi ho bisogno di aprire un file e scrivere in esso. Dannazione ... –

+0

http://stackoverflow.com/questions/4870328/how-to-read-environment-variable-in-node-js mostra come accedere al proprio ambiente senza effettuare il bombardamento. Funziona anche per le scritture. – chicks

2

dare una prova:

https://www.npmjs.com/package/shelljs

non credo sia possibile per un processo figlio per cambiare ambiente di processo del genitore. Quindi non penso davvero che sia possibile usare child_process.

codice di esempio:

var shell = require('shelljs'); 
shell.exec('export ENV_VARIABLE=ABRACADABRA'); 
+0

hai ragione, non funziona con child_process. L'esportazione del pensiero rende le cose globali con l'effetto che non è rilevante quale sia la shell madre ... –

+0

Non funzionerà anche in Windows. L'obiettivo principale di shelljs è mutiplatform – sam

3

Come altre risposte hanno sottolineato, sborsare e cambiando una variabile di ambiente è fondamentalmente un NO-OP. O vuoi cambiare l'ambiente per il tuo attuale processo e i suoi figli o vuoi cambiarlo per nuovi processi. La modifica di /etc/profile apporterà la modifica per qualsiasi nuovo processo come dice @Hmlth.

Se si desidera cambiare l'ambiente per il processo in corso questo è semplice:

process.env.YOUR_VAR = 'your_value'; 
Problemi correlati