NodeJS为exec设置环境变量

Tow*_*wer 31 node.js

我想在运行程序时设置环境变量child_process.exec.这可能吗?

我试过这样设置env:

exec('FOO', {'FOO': 'ah'}, function(error, stdout, stderr) {console.log(stdout, stderr, error);});
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*s F 55

你必须通过一个选择对象,其中的关键ENV,其值本身是键值对的对象.

exec('echo $FOO', {env: {'FOO': 'ah'}}, function (error, stdout, stderr) 
{
    console.log(stdout, stderr, error);
});
Run Code Online (Sandbox Code Playgroud)

  • 使用它的任何人都应该注意,以这种方式指定环境变量会替换_entire_环境变量集,*包括*可能存在的任何"PATH".因此,如果您尝试设置一个env变量,并且您突然收到有关您尝试执行的命令的错误,这就是原因.这一点在文档中根本不清楚,让我摸不着头脑.如果你想添加env变量并保持与平台无关,你可以复制`process.env`,将更改应用到它,并将其传递给`child_process.exec`. (51认同)
  • 补充@DanielSmedegaardBuus 答案,您可以使用扩展运算符。`env: { ...process.env, 'FOO': '啊'}` (4认同)
  • 您还可以更新`process.env` direclty.例如:`process.env ["PATH"] + = path.delimiter + process.cwd()+ path.sep +"node_modules"+ path.sep +".bin"` (3认同)

rap*_*2-h 6

根据@DanielSmedegaardBuus 的回答,如果您想保留它们,您必须您的环境变量添加到现有的环境变量中:

exec(
  "echo $FOO", 
  { env: { ...process.env, FOO: "ah" } }, 
  function (error, stdout, stderr) {
    console.log(stdout, stderr, error);
  }
);
Run Code Online (Sandbox Code Playgroud)

  • 是的,这就是我应该写的:D 我的名字是 DanielSmedegaardBuus,我赞同这条消息:D (7认同)