2017-02-28 100 views
0

我需要一種永久設置環境變量的方法。我現在只能在Windows上工作,但是理想情況下我想要一個與操作系統無關的解決方案。從我可以告訴,但Node將只爲當前進程/子進程設置var。我甚至想要什麼?是否可以永久設置環境變量?

+0

「永久地」影響其他炮彈並繼續重新啓動?這是非常特定的平臺,甚至取決於該人使用的shell。我不知道有一個庫這樣做,也不是一個好主意,因爲如果你開始干擾環境變量到他們的shell配置中,人們有權爲難。 – tadman

回答

0

大概可以使用setxexport,雖然不確定需要的含義/特權(我假設在Windows中需要一個UAC凹凸,而在linux中你需要sudo)。這裏有一個猜測:

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

我應該提到這真的不是理想;我建議將它們定義爲執行任務的一部分,或者使用類似dotenv的東西。

+0

爲什麼這不理想? – user3715648

+0

我無法想到爲什麼我會在節點腳本的上下文中修改系統級環境值。我的意思是*可能*在一個實例中,比如從一個生成器中安裝某些東西,但我仍然不希望修改我的環境包。 –