2017-02-28 4 views
0

Ich brauche eine Möglichkeit, um eine Umgebungsvariable dauerhaft einzustellen. Ich könnte jetzt damit davonkommen, dass dies nur in Windows funktioniert, aber im Idealfall möchte ich eine Lösung, die OS-agnostisch ist. Soweit ich das beurteilen kann, setzt Node nur die Variable für den aktuellen Prozess/die untergeordneten Prozesse. Ist was ich will überhaupt möglich?Ist es möglich, Umgebungsvariablen dauerhaft zu setzen?

+0

"Permanent" wie in anderen Shells beeinflussen und einen Neustart überleben? Dies ist * extrem * plattformspezifisch, sogar bis zu dem Punkt, abhängig davon, welche Shell die Person verwendet. Ich weiß nicht, dass es eine Bibliothek gibt, die das tut, noch dass dies sogar eine gute Idee ist, da die Leute das Recht haben, verärgert zu sein, wenn Sie anfangen, Umgebungsvariablen in ihre Shell-Konfiguration zu stauen. – tadman

Antwort

0

Kann wahrscheinlich setx und export verwenden, obwohl nicht sicher von Implikationen/Privilegien erforderlich (ich würde davon ausgehen, dass in Windows ein UAC-Bump notwendig wäre, und in Linux würden Sie sudo benötigen). Hier ist ein Best-rate:

var exec = require('child_process').exec; 

// Add FOO to global environment with value BAR 
// setEnv('FOO', 'BAR', callback) 
// Append /foo/bar to PATH 
// setEnv('PATH', '+=;/foo/bar', callback) 
function setEnv(name, value, cb) { 
    if (!name) throw new Error('name required.'); 
    if (typeof value === 'undefined') throw new Error('value required.'); 

    var cmd; 
    if (value.indexOf('+=') === 0) value = process.env[name] + value.substring(2); 
    value = value.indexOf(' ') > -1 ? `"${value}"` : value; 

    switch (process.platform) { 
    case 'linux': cmd = `export ${name}=${value}`; break; 
    case 'win32': cmd = `setx ${name} ${value} /m"; break; 
    default: throw new Error('unsupported platform.'); break; 
    } 

    exec(cmd, cb); 
} 

Ich sollte erwähnen, das ist wirklich nicht ideal; Ich empfehle, sie als Teil Ihrer Ausführungsaufgabe zu definieren oder mit etwas wie dotenv zu arbeiten.

+0

Warum ist das nicht ideal? – user3715648

+0

Ich kann mir keinen * guten * Grund vorstellen, warum ich einen Umgebungswert auf Systemebene im Kontext eines Node-Skripts ändern würde. Ich meine * möglicherweise * in einer Instanz wie die Installation von etwas aus einem Generator, aber ich würde immer noch nicht wollen, dass ein Paket mein env ändert. –

Verwandte Themen