2017-12-18 12 views
0

repoのコードをクローンしてそのフォルダにnpm installを実行するためにchild_process execというノードを作成しました。すべてがWindowsマシンでうまく動作していますが、Macマシンではうまく動作していません。また、コマンドがcmdプロンプトで与えられたときにもうまく動作します。どのようにこれを解決することができます。 Windowsのでノードchild_processは、Macでは1つ以上のコマンドを実行していませんが、ウィンドウでうまく動作します。

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

cdが実行されるとnpmcd完了後に実行される前に、あなたのgit cloneが完了しますので、Windows上、&文字が順番に実行されるコマンドを分離してコマンド。おそらくそれはあなたが起こりたいものです。

ただし、Macの場合&は、「前のコマンドをバックグラウンドプロセスとして実行し、最初のコマンドが完了するのを待つことなくすぐに次のコマンドを実行する」ことを意味します。したがって、Macでは、その行の3つのコマンドはすべて別々の独立したプロセスとして同時に実行され、cdコマンドが成功しても、npmコマンドの新しい作業ディレクトリは確立されません。だから何か起こりますが、結果はあなたが望むものではありません。

MacのWindows &セパレータに相当するものは;文字なので、プラットフォームごとに異なるコマンド文字列を作成して実行するのが1つの解決策です。

代わりに、WindowsとMacの両方が&&セパレータを理解していることを利用することです。これは、「次のコマンドを実行した後でのみ実行する」という意味です前のものは正常に完了します。したがって、あなたのコマンド文字列の&&&に変更することができます。両方のプラットフォームで動作するはずです。何か問題が起きた場合(たとえば、git cloneが失敗した場合)、ディレクトリを汚染する可能性があります(projectNameディレクトリが作成されていない場合は元の親ディレクトリにnpm installを実行しています)。

+0

とても早く対応いただきありがとうございます。それは私の問題を解決しました:) –

関連する問題