2017-12-18 274 views
0

我已经编写了节点child_process exec克隆代码从回购,然后在该文件夹上执行npm安装。一切工作正常与Windows机器,但不是与Mac机。当通过cmd提示命令时,它也可以正常工作。这怎么能解决。节点child_process没有在Mac上执行更多的一个命令,但与Windows正常工作

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); 
}); 

回答

0

在Windows命令&字符分隔开是按顺序运行的命令,所以在Windows的git clone之前执行cdnpm之后cd完成执行将完成。想必这就是你想要发生的事情。

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

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

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

+0

非常感谢你如此快速的回应。它解决了我的问题:) –

相关问题