节点 child_process 未在 mac 上执行多个命令,但在 windows 上运行良好

node child_process not executing more that one command on mac but working fine with windows

我已经编写了 node child_process exec 来从 repo 克隆代码,然后在该文件夹上执行 npm install。使用 windows machine 一切正常,但使用 mac machine 则不行。当通过 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被执行,npmcd完成后被执行。大概这就是你想要发生的事情。

然而,在 Mac & 上意味着 "run the preceding command as a background process and immediately execute the following command, without waiting for the first command to finish"。因此,在 Mac 上,该行中的所有三个命令将作为单独的独立进程同时执行,即使 cd 命令成功,它也不会为 npm 命令建立新的工作目录。所以会发生一些事情,但结果不会是你想要的。

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

另一种方法是利用 Windows 和 Mac 都理解 && 分隔符这一事实,这意味着 "execute the next command only after the previous one completes successfully"。因此,您可以在命令字符串中将 & 更改为 &&,这应该适用于两个平台,还有一个额外的好处,即如果出现问题(例如,如果 git clone 失败)则你不会做额外的工作可能会污染你的目录树(比如 运行ning npm install 在原始父目录中,如果 projectName 目录没有创建)。