gulp - 如何管理任务

时间:2015-09-21 06:51:59

标签: javascript gulp

我有这个任务:

var path = require('path');
var gulp = require('gulp');
var conf = require('./conf');
var svgSprite = require("gulp-svg-sprites");
var clean = require('gulp-clean');

gulp.task('sprite-make', function () {

  //first task
  gulp.src([path.join(conf.paths.src, '/assets/svg/*.svg'), '!' + path.join(conf.paths.src, '/assets/svg/sprite.svg')])
    .pipe(svgSprite({
      preview: false,
      svgPath: path.join(conf.paths.src, '/assets/svg/sprite.svg'),
      cssFile: ('_sprite.scss')
    }))
    .pipe(gulp.dest(path.join(conf.paths.src, '/app/styles')));

  //second task
  gulp.src(path.join(conf.paths.src, '/app/styles/svg/**/*'))
    .pipe(gulp.dest(path.join(conf.paths.src, '/assets/svg')));

  //third task
  gulp.src(path.join(conf.paths.src, '/app/styles/svg'), {read: false})
    .pipe(clean());

});

我想要的是一个接一个地执行这个任务(创建精灵 - >将它复制到新目的地 - >删除src)。

目前正在运行异步的任务,如果我尝试pipe(gulp.src(...),我收到以下错误:Unhandled stream error in pipe

1 个答案:

答案 0 :(得分:0)

在文档中很好地定义了:https://github.com/gulpjs/gulp/blob/master/docs/API.md

  

注意:默认情况下,任务以最大并发性运行 - 例如它   立即启动所有任务并等待一切。如果你想   创建一个系列,其中任务以特定顺序运行,您需要这样做   两件事:

     

在任务完成时给它一个提示告诉它,然后给它一个提示   任务取决于另一个任务的完成。对于这些例子,   让我们假设你有两个任务,即“一个”和“两个”   特别希望按此顺序运行:

     

在任务“one”中,您可以在任务完成时添加提示以告诉它。或   接受回电,并在完成或回复承诺时调用它   引擎应该等待分别解决或结束的流。

     

在任务“2”中,您添加一个提示,告诉引擎它依赖于什么   完成第一项任务。

     

所以这个例子看起来像这样:

var gulp = require('gulp');

// takes in a callback so the engine knows when it'll be done
gulp.task('one', function(cb) {
    // do stuff -- async or otherwise
    cb(err); // if err is not null and not undefined, the run will stop, and note that it failed
});

// identifies a dependent task must be complete before this one begins
gulp.task('two', ['one'], function() {
    // task 'one' is done now
});

gulp.task('default', ['one', 'two']);