RubyとRakeの経験はありますが、現在Nodeプロジェクトに取り組んでおり、Jakeで同じことを行う方法を学びたいと思っています。
Ruby にはsystem
、コマンドをシェルアウトして終了するのを待つ関数があります。Rake はこれを拡張してsh
、子プロセスがゼロ以外の終了コードを返した (またはまったく見つからなかった) 場合にさらにエラーをスローする関数を追加します。sh
何かが失敗するとすぐにタスクを自動的に終了するため、コンパイラやテストフレームワークなどにシェルアウトする Rake タスクには非常に便利です。
system
Node にはorのようなものはないようですsh
-- 最も近い同等のものはchild_process.spawn
andのように見えますchild_process.exec
が、どちらも STDOUT または STDERR に接続されていないため、追加の作業を行わない限り、子プロセスからの出力は表示されません。
sh
ジェイクのメソッドを取得する最良の方法は何ですか? (ただし、これは Node であるため、Ruby のようにコマンドが返されるまでブロックするのではなく、非同期であることを期待します。) この特定のホイールを既に発明した npm モジュールはありますか、または誰かがそれを行うコード サンプルを持っていますか?これ?
私はすでにsh.jsを見てきましたが、これは非常に重く見え (ノードでコマンドインタープリター全体を構築しようとします)、非同期のようには見えません (ただし、ドキュメントでは一方向または他の)。
私は多かれ少なかれこのように使用できるものを探しています(非同期タスクに対するジェイクのサポートを使用):
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);