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
も更新する必要があります。
index
のscripts
にパイプするにはどうすればよいですか?
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
を完了する必要があります。
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" ));