Node.js和Jake – 如何在任务中同步调用系统命令?

Jake任务执行长时间运行的系统命令。 另一个任务取决于第一个任务在开始之前完全完成。 'child_process'的'exec'functionasynchronous执行系统命令,从而可以在第一个任务完成之前开始第二个任务。

写Jakefile以确保第一个任务中长时间运行的系统命令在第二个任务开始之前完成的最简洁的方法是什么?

在第一项任务结束时,我曾想过在一个虚拟循环中使用轮询,但是这只是味道不好。 好像有一个更好的办法。 我已经看到了这个问题 ,但它不能解决我的问题。

var exec = require('child_process').exec; desc('first task'); task('first', [], function(params) { exec('long running system command'); }); desc('second task'); task('second', ['first'], function(params) { // do something dependent on the completion of 'first' task }); 

我通过重新阅读马修·埃尔尼斯的post,find了自己的问题的答案。 对于那些想知道如何去做的人来说:

 var exec = require('child_process').exec; desc('first task'); task('first', [], function(params) { exec('long running system command', function() { complete(); }); }, true); // this prevents task from exiting until complete() is called desc('second task'); task('second', ['first'], function(params) { // do something dependent on the completion of 'first' task }); 

只是为了将来的参考,我有一个没有其他依赖关系的同步执行模块。

例:

 var allsync = require("allsync"); allsync.exec( "find /", function(data){ process.stdout.write(data); }); console.log("Done!"); 

在上面的例子中,只有 find过程存在之后才能打印Doneexecfunction基本上阻塞,直到完成。