2017-12-18 258 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

非常感謝你如此快速的迴應。它解決了我的問題:) –

相關問題