如何管理到Gulp的另一项任务?

时间:2014-05-04 16:05:37

标签: gulp gulp-watch

我试着干我的gulpfile。在那里,我有一些我不熟悉的代码重复。如何做得更好?

gulp.task('scripts', function() {
  return gulp.src('src/scripts/**/*.coffee')
    .pipe(coffeelint())
    .pipe(coffeelint.reporter())
    .pipe(coffee())
    .pipe(gulp.dest('dist/scripts/'))
    .pipe(gulp.src('src/index.html'))  // this
    .pipe(includeSource())             // needs
    .pipe(gulp.dest('dist/'))          // DRY
});

gulp.task('index', function() {
  return gulp.src('src/index.html')
    .pipe(includeSource())
    .pipe(gulp.dest('dist/'))
});

我将index作为一项单独的任务,因为我需要观看src/index.html进行直播。但我也在关注我的.coffee来源,当他们发生变化时,我也需要更新src/index.html

如何在index中管道scripts

2 个答案:

答案 0 :(得分:25)

gulp使您能够根据参数订购一系列任务。

示例:

gulp.task('second', ['first'], function() {
   // this occurs after 'first' finishes
});

尝试以下代码,您将运行任务' index'运行这两个任务:

gulp.task('scripts', function() {
  return gulp.src('src/scripts/**/*.coffee')
    .pipe(coffeelint())
    .pipe(coffeelint.reporter())
    .pipe(coffee())
    .pipe(gulp.dest('dist/scripts/'));
});

gulp.task('index', ['scripts'], function() {
  return gulp.src('src/index.html')
    .pipe(includeSource())
    .pipe(gulp.dest('dist/'))
});

任务index现在需要scripts才能在其内部运行代码之前完成。

答案 1 :(得分:3)

如果您查看Orchestrator源代码,特别是.start()实现,您会看到如果最后一个参数是函数,它会将其视为回调函数。

我为自己的任务编写了这段代码:

  gulp.task( 'task1', () => console.log(a) )
  gulp.task( 'task2', () => console.log(a) )
  gulp.task( 'task3', () => console.log(a) )
  gulp.task( 'task4', () => console.log(a) )
  gulp.task( 'task5', () => console.log(a) )

  function runSequential( tasks ) {
    if( !tasks || tasks.length <= 0 ) return;

    const task = tasks[0];
    gulp.start( task, () => {
        console.log( `${task} finished` );
        runSequential( tasks.slice(1) );
    } );
  }
  gulp.task( "run-all", () => runSequential([ "task1", "task2", "task3", "task4", "task5" ));