你如何运行吞吐量“结束”的任务,但只在当前任务结束?

我正在使用Gulp来收集前台的内容(通过gulp-front-matter插件),然后汇总后,我将其保存到另一个文件中。 在其他数据中,我保存了一堆CSS。 以下是我的compileCSS任务:

 var collected = []; gulp.src('./client/**/*.html') .pipe(frontMatter({ property: 'meta', remove: true })) .pipe(through.obj(function(file, enc, callback) { var css = file.meta; collected.push(css); })) .pipe(gulp.dest('./build/templates')) .on('end', function() { var cssPath = ['build', 'assets', 'css', 'compiled.css']; fs.writeFileSync(cssPath.join(path.sep), cssPath); }) 

;

该任务按预期工作(请注意,这是一个简化的版本)。 一切都按预期工作,我得到一个compiled.css文件与所有的前端CSS。 但是,我发现不仅需要在我的常规css文件上使用Prefixer,而且还需要在这个新的compiled.css中使用Prefixer。 所以我创build了一个prefix任务:

 gulp.task('prefix', ['compileCSS', 'copy'], function() { gulp.src('./build/assets/css/*.css') .pipe(autoprefixer({ browsers: ['last 3 versions'] })) .pipe(gulp.dest('build')) ; }); 

现在,问题是on('end'函数在所有任务结束时运行,而不仅仅是compileCSS任务。

我的问题是,有没有办法为每个任务注入一个“结束”types的任务? 或者有什么方法可以以某种方式使用stream(因为最后一个任务不是实际的stream,并没有利用它,我不知道如何)。

这不是问题的序列,我没有返回创build竞争条件的stream,所以这样的修复工作:

 return gulp.src('./client/**/*.html') .pipe(dosomething()); \\ all other code 

我想问题在于,Gulp在启动下一个活动之前要等待一段时间才能完成。 没有返回stream或承诺,Gulp简单地运行任务,不等待它完成。

你可以尝试run-sequence

 var runSequence = require('run-sequence'); gulp.task('mytask', function(cb) { runSequence( ['parallel1', 'parallel2'], 'seq1', 'seq2', cb ); }); 

如果你想要更多与你的gulpfile相关的gulpfile ,你应该把它包含到你的问题中。