我对Ruby和Rake有一些经验,但现在我正在做一个Node项目,想学习如何用Jake做同样的事情。
Ruby 有一个system
函数可以输出一个命令并等待它退出。Rake 通过添加一个sh
函数来扩展这一点,如果子进程返回非零退出代码(或根本找不到),该函数将另外抛出错误。sh
对于需要编译器或测试框架之类的 Rake 任务来说非常方便,因为一旦出现任何故障,它就会自动终止任务。
Node 似乎没有类似system
or的东西sh
——它看起来最接近的等价物是child_process.spawn
and child_process.exec
,但它们都没有连接 STDOUT 或 STDERR,所以除非你做一些额外的工作,否则你看不到子进程的任何输出。
sh
为 Jake获取方法的最佳方法是什么?(虽然这是 Node,我希望它是异步的,而不是像 Ruby 那样在命令返回之前阻塞。)是否有一个 npm 模块已经发明了这个特定的轮子,或者有人有一个代码示例这个?
我已经看过sh.js,但它看起来非常重量级(它试图在 Node 中构建一个完整的命令解释器),而且它看起来不像是异步的(尽管文档没有说一种方式或其他)。
我正在寻找可以或多或少这样使用的东西(使用 Jake 对异步任务的支持):
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);