2015-10-19 101 views
0

我正尝试创建一个吞噬任务,通过执行一个shell脚本来更新我项目中的所有资源。问题是它按预期执行,然后挂起。Gulp子进程挂起

'use-strict'; 

var gulp = require('gulp'), 
    gutil = require('gulp-util'); 
    exec = require('child_process').exec; 
var foreach = require('gulp-foreach'); 

gulp.task('update-assets', function() { 
     exec('./update_assets.sh', {cwd: 'assets'}, function(err, stdout, stderr) { 
     console.log(stdout); 
     console.log(stderr); 
     cb(err); 
    }); 
}); 

gulp.task('default', ['update-assets'], function() { 
    gulp.start('update-assets'); 
}); 

回答

1

这是因为exec()的性质。 exec()是否允许你赋予它的命令“接管”当前进程。你可以做的是尝试像child_process.spawn。如果它是一个守护进程。

仔细看看Child_Process documentation。我认为这应该有助于你获得一个好的开始。

其他可能有用的选项包括修改脚本以抛出Gulp识别的退出码或使用超时来了解吞噬任务何时终止。

更新:或者,您可以使用这个,这是我在运行Web服务器时找到的。 shell.exec('./update_assets.sh', {async:true});