Gulp 吞咽和全局流任务完成得太早

Gulp 吞咽和全局流任务完成得太早,gulp,Gulp,我有一个Gulp任务,它使用glob stream递归地循环目录和文件来执行任务,类似于下面的任务,但要复杂得多: var gs = require('glob-stream'); var config = { PATH: 'some/path/*.*' } function doSomething(filePath) { var stream = gs.create(filePath); // Do something return gs.on('data', doS

我有一个Gulp任务,它使用glob stream递归地循环目录和文件来执行任务,类似于下面的任务,但要复杂得多:

var gs = require('glob-stream');

var config = {
  PATH: 'some/path/*.*'
}


function doSomething(filePath) {
  var stream = gs.create(filePath);

  // Do something

  return gs.on('data', doSomething);
}


gulp.task('compile', function() {
  var filePath = config.PATH;
  return doSomething(filePath);
});

我可以让任务获得结果并编译我需要的内容,但不幸的是Gulp认为任务已经完成,而它仍在运行,这在我的构建过程中造成了问题-我如何避免这种情况?我已经在使用运行序列,但没有效果。

为什么要使用递归函数手动遍历目录树?为什么不让
glob-stream
为您做这项工作呢?然后您只需处理
//做点什么
部分:

var config = {
   PATH: 'some/path/**' //glob pattern for all subfolder and files
};

function doSomething(filePath) {
   //Do something
}

gulp.task('compile', function() {
  var stream = gs.create(config.PATH);
  stream.on('data', doSomething);
  return stream;
});

gulp.task('secondTask', function() {
  console.log('secondTask');
});

gulp.task('default', function() {
  runSequence('compile', 'secondTask');
});
some/path/**
glob模式创建了
some/path/
下面所有文件夹和文件的流,因此您不必自己实现递归树遍历


请注意,
编译
任务返回
。否则,gulp无法判断
编译
任务何时完成,并在
编译
完成之前开始运行
第二个任务。

嘿,谢谢你的回复!我正在努力解决的问题是,第二个任务仍然在编译任务完成之前被调用,即使在返回流之后也是如此!您是否放弃了递归的
doSomething()
?如果是,那么您可能正在
doSomething()
中执行异步操作。流完成,第二个任务开始运行,但异步操作尚未完成。