节点child_process没有在Mac上执行更多的一个命令,但与Windows正常工作
我已经编写了节点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);
});
回答:
在Windows命令&
字符分隔开是按顺序运行的命令,所以在Windows的git clone
之前执行cd
和npm
之后cd
完成执行将完成。想必这就是你想要发生的事情。
但是,在Mac上&
的意思是“将上述命令作为后台进程运行,并立即执行以下命令,而无需等待第一个命令完成”。因此,在Mac中,该行中的所有三个命令将作为单独的独立进程同时执行,即使命令成功,也不会为npm
命令建立新的工作目录。所以会发生什么,但结果不会是你想要的。
Mac上Windows &
分隔符的等价物是;
字符,因此一种解决方案是为每个平台构建和执行不同的命令字符串。 (如果决定这样做,JavaScript字符串join()方法将很有用)。
另一种方法是利用Windows和Mac都了解&&
分隔符的事实,这意味着“仅在执行下一个命令后前一个成功完成“。因此,您可以在您的命令字符串中更改&
至&&
,并且这应该可以在两个平台上运行,并且还有其他好处,例如,如果出现问题(例如,git clone
失败),则不会执行可能会污染您的目录的额外工作树(例如,如果未创建projectName
目录,则在原始父目录中运行npm install
)。
以上是 节点child_process没有在Mac上执行更多的一个命令,但与Windows正常工作 的全部内容, 来源链接: utcz.com/qa/262185.html