2017-03-10 6 views
1

OSXとWindowsでshellコマンドを実行する次のコードを取得しようとしています。NodeJS:ドットスラッシュコマンドラインを実行するWindows

const exec = require("child_process").exec; 
const runCommand = (cmd) => exec(cmd, 
    function (error, stdout, stderr) { 
     if (stdout.length > 0) { 
      console.log(stdout); 
     } 
    }); 

runCommand("./node_modules/.bin/someBinary")の場合、Windowsでは動作しません。しかし、それはOSXで正常に動作します。だから私はそれがWindowsでも動くために何が必要なのでしょうか?

+0

'runCommand("。\ node_modules \ .bin \ someBinary ")' –

+0

そこにはWindowsバイナリがありますか? –

+2

現在の作業ディレクトリは何ですか? –

答えて

0

さて、私はどのプラットフォームにいるのかを確認して解決しましたが、順番にOS固有のコマンドを実行して実行しました。

簡潔に私はprocess.platformを使って、それがどのOSであるかを調べました。最もエレガントではありません。しかし、少なくともそれは私の問題を解決しました。

0

npm-execで試してみましたか?

npm実行スクリプトと同じ環境を読み込みますが、任意のbashコマンドラインを実行します。 (窓でさえ!恥ずかしがり屋のおかげで)。これには、$ PATHの変更が含まれているので、node_modules/.binのスクリプトはグローバルモジュールの前に使用されます。

だから、可能性npm-exec someBinaryの代わりに、Windowsの/ OSXの互換性に

を壊す相対パスを使用して、このモジュールは、あなたに合っていない場合はthis answerで説明したように、あなたもnpm binで試してみることができます。

+0

これはあなたの問題を直接解決するものではありませんが、gulpファイルの作業中に同じ問題が発生しました。私が見つけた最もエレガントな解決策は、gulpを取り除き、私のpackage.jsonの "scripts"ノードを使用することでした。そこにはプロジェクトの依存関係のコマンドラインツールを自由に使用することができます。/node_modules/** /。bin/' – bviale

+0

' npm bin 'と同じ結果でした。何か '$(npm bin)/ someBinary'でそれを囲む必要があるので、Windowsはドル記号を認識しません... – starcorn

+0

@starcorn okしかしnpm-execはどうですか? – bviale

関連する問題