gulp watch后如何触发相关任务

时间:2016-08-03 22:40:02

标签: gulp gulp-watch

在尝试使用gulp-watch的任务之后,我一直试图弄清楚如何触发依赖任务。我想我在这里做坏事。所以,我想要做的是转换整个项目(+观察更改),在完成之后我想要触发依赖于此的捆绑任务。由于转换的任务包括观察,我不能把它作为依赖任务,但我需要一种方法来知道整个转换已完成,进行初始捆绑和每次更改我想再次进行捆绑

怎么做?

这就是转换任务的样子:

gulp.task('babel', () => {
  return gulp.src(babelSrc)
    .pipe(watch(babelSrc, () => console.log('watch'))
    .pipe(babel({...}))
    .pipe(gulp.dest('build'));
});

传递给watch的回调将在每次编译文件时控制日志watch,只有在完成整个项目的初始化后才能触发捆绑任务。

1 个答案:

答案 0 :(得分:0)

  

我想做的是转换整个项目[...]并在完成之后我想触发捆绑任务

现在这样做是不可能的。当您.pipe() gulp-watch插件时,它会阻止流发出'end''finish'个事件。因此,无法知道最初的babel编译何时完成。

您需要将初始编辑与手表分开。 这样你就可以监听'end'事件并从那里触发你的依赖任务。

gulp.task('dependend-task', () => {
  ...
});

function babelStream(stream) {
  return stream
   .pipe(babel({...}))
   .pipe(gulp.dest('build'))
   .on('end', () => gulp.start('dependend-task'));
}

gulp.task('babel', () => {
  watch(babelSrc, {ignoreIntial:true, read:false}, function(file) {
    return babelStream(gulp.src(file.path));
  });
  return babelStream(gulp.src(babelSrc));
});