我正在尝试创建一个gulp任务,通过执行shell脚本来更新项目中的所有资产。问题是它按预期执行然后挂起。
'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');
});
答案 0 :(得分:1)
这是因为exec()
的性质。什么exec()它允许你给它的命令"接管"目前的过程。你可以做的是尝试child_process.spawn
之类的东西。如果它是一个守护进程。
好好看看Child_Process documentation。我认为这可以帮助你获得良好的开端。
其他可能有用的选项包括修改脚本以抛出Gulp识别的退出代码,或使用超时来知道gulp任务何时终止。
更新:或者,您可以使用此功能,这是我在运行Web服务器时发现的功能。
shell.exec('./update_assets.sh', {async:true} );