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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node child_process没有在mac上执行多一个命令,但在windows上工作正常相关的知识,希望对你有一定的参考价值。

我编写了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);
});
答案

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

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

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

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

以上是关于node child_process没有在mac上执行多一个命令,但在windows上工作正常的主要内容,如果未能解决你的问题,请参考以下文章

如何模拟 Node.js child_process spawn 函数?

Node 核心模块之 child_process

node child_process

在没有 Webpack 的情况下使用模块“child_process”

进程替换 - Node.js child_process

如何使用 node.js child_process API 运行 jar 文件?