私はRubyとRakeの経験を持っていますが、今はNodeプロジェクトに取り組んでおり、Jakeと同じことをする方法を学びたいと思っています。JakeのRakeの 'sh'に相当しますか?
Rubyにはsystem
という機能があり、コマンドを実行して終了するのを待ちます。 Rakeはこれを拡張するために、sh
関数を追加します。この関数は、子プロセスがゼロ以外の終了コードを返した場合(またはまったく見つからない場合)にエラーをさらにスローします。 sh
は、何かが失敗するとすぐに自動的にタスクを終了させるので、コンパイラやテストフレームワークのようなものにシェルするRakeタスクにとっては、本当に便利です。最寄りの等価物はchild_process.spawn
とchild_process.exec
ているように見えますが、それらのいずれも、ワイヤアップSTDOUTやSTDERRを、あなたは子供から任意の出力を見ることができない -
ノードはsystem
またはsh
ようなものを持っていないようですあなたが余分な仕事をしない限り、
Jakeのsh
メソッドを取得する最も良い方法は何ですか? (これはNodeなので、Rubyのようにコマンドが返るまでブロックするのではなく、非同期であると思っています)。この特定のホイールをすでに作成しているnpmモジュールがあるか、誰かがコードサンプルを持っていますか?この?
私は既にsh.jsを見ましたが、これは非常に重く見えます(ノード内にコマンドインタープリタ全体を構築しようとします)、非同期ではありません(ただし、または他のもの)。
私は(async tasks用ジェイクのサポートを使用して)このように、多かれ少なかれ使用することができます何かを探しています:
file('myprogram', ['in.c'], function() {
// sh(command, args, successCallback)
sh('gcc', ['in.c', '-o', 'myprogram'], function() {
// sh should throw if gcc couldn't be found or returned nonzero.
// So if we got here, we can tell Jake our task completed successfully.
complete();
});
}, true);