node child_process没有在mac上执行多一个命令,但在windows上工作正常

问题描述 投票:0回答:1

我编写了node child_process exec,用于从repo克隆代码,然后在该文件夹上执行npm install。 Windows机器一切正常,但没有mac机器。通过cmd提示命令时,它也可以正常工作。如何解决这个问题。

var projectSetup = myexec("git clone http://127.0.0.1/username/projectName.git & cd projectName & sudo npm install");
projectSetup.on("exit", function(data) {
    console.log("Exit "+ data);
});
node.js macos command exec child-process
1个回答
0
投票

在Windows命令中,&字符分隔要按顺序运行的命令,因此在Windows上,git clone将在执行cd之前完成,npm将在cd完成后执行。据推测,这就是你想要发生的事情。

但是,在Mac上,&表示“将前面的命令作为后台进程运行,并立即执行以下命令,而不等待第一个命令完成”。因此,在Mac上,该行中的所有三个命令将作为单独的独立进程同时执行,即使cd命令成功,它也不会为npm命令建立新的工作目录。所以会发生一些事情,但结果将不是你想要的。

相当于Mac上的Windows &分隔符是;字符,因此一种解决方案是为每个平台构建和执行不同的命令字符串。 (如果决定这样做,JavaScript字符串join()方法将非常有用。)

另一种方法是利用Windows和Mac都理解&&分隔符的事实,这意味着“只有在前一个命令成功完成后才执行下一个命令”。因此,您可以在命令字符串中将&更改为&&,这应该适用于两个平台,并且还有一个额外好处,即如果出现问题(例如,如果git clone失败),那么您将不会执行可能污染您的目录的其他工作树(如果未创建npm install目录,则在原始父目录中运行projectName)。

© www.soinside.com 2019 - 2024. All rights reserved.