2011-10-19 182 views
16

我想在通过child_process.exec运行程序时设置环境变量。这可能吗?NodeJS为exec设置的环境变量

我尝试设置env这样的:

exec('FOO', {'FOO': 'ah'}, function(error, stdout, stderr) {console.log(stdout, stderr, error);}); 

但由此产生的消息说FOO并不存在。

回答

37

您必须传递一个选项对象,其中包含键值env,其值本身就是键值对的对象。

exec('echo $FOO', {env: {'FOO': 'ah'}}, function (error, stdout, stderr) 
{ 
    console.log(stdout, stderr, error); 
}); 
+28

任何使用此方法的人都应该注意,通过这种方式指定环境变量将替换环境变量的_entire_集,包括任何可能存在的'PATH'。所以,如果你尝试设置一个env变量,并且你突然得到关于你试图执行不被发现的命令的错误,这就是为什么。这从文档中根本看不出来,让我挠了一下脑袋。如果你想添加env变量并保持平台不可知,你可以创建一个'process.env'副本,将你的修改应用到那个,并将它传递给'child_process.exec'。 – DanielSmedegaardBuus

+1

您也可以更新'process.env' direclty。例如:'process.env [“PATH”] + = path.delimiter + process.cwd()+ path.sep +“node_modules”+ path.sep +“.bin” – mems