web-dev-qa-db-ja.com

Gulpで別のタスクにパイプする方法は?

DRY my 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/'))
});

src/index.htmlを監視してlivereloadする必要があるため、indexを別のタスクとして取得しました。しかし、私は.coffeeソースも監視しており、ソースが変更された場合は、src/index.htmlも更新する必要があります。

indexscriptsにパイプするにはどうすればよいですか?

19
srigi

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を完了する必要があります。

25
SteveLacy

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" ));
3
Assaf Moldavsky