我有Ruby和Rake的一些經驗,但現在我正在做一個Node項目,並且想要學習如何用Jake做同樣的事情。Rake的'sh'等於Jake嗎?
Ruby有一個system
函數,該函數將放出一個命令並等待它退出。 Rake通過添加一個sh
函數來擴展此功能,如果子進程返回非零退出代碼(或根本找不到),則該函數將另外拋出一個錯誤。對於Rake任務而言,sh
非常方便,因爲Rake任務會在編譯器或測試框架等事物中脫穎而出,因爲它會在任何失敗後自動終止任務。
節點似乎不會有什麼像system
或sh
- 它看起來像最近的等效是child_process.spawn
和child_process.exec
,但他們都沒有電線連接起來stdout或stderr,所以你不能看到孩子的任何輸出除非你做了一些額外的工作。
爲傑克獲得sh
方法的最佳方法是什麼? (雖然因爲這是Node,所以我希望它是異步的,而不是像Ruby那樣直到命令返回時才被阻塞。)是否有一個npm模塊已經發明瞭這個特定的輪子,還是有人有一個代碼示例這個?
我已經看到sh.js,但它看起來非常重量級(它試圖在Node中構建一個完整的命令解釋器),它看起來不像是異步的(儘管文檔沒有說一種方法或其他)。
我正在尋找的東西,我可以用更多或更少的這樣的(用傑克的支持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);