J'essaie de DRY mon gulpfile. Là, j'ai une petite duplication de code avec laquelle je ne suis pas à l'aise. Comment cela peut-il être amélioré?
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/'))
});
J'ai obtenu index
comme tâche distincte, car je dois regarder src/index.html
à la charge hépatique. Mais je regarde aussi mon .coffee
les sources et quand elles changent, je dois mettre à jour src/index.html
ainsi que.
Comment puis-je diriger vers index
dans scripts
?
gulp
vous permet d'ordonner une série de tâches basées sur des arguments.
Exemple:
gulp.task('second', ['first'], function() {
// this occurs after 'first' finishes
});
Essayez le code suivant, vous exécuterez la tâche "index" pour exécuter les deux tâches:
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/'))
});
La tâche index
nécessitera désormais la fin de scripts
avant d'exécuter le code dans sa fonction.
Si vous examinez la source d'Orchestrator, en particulier l'implémentation .start()
, vous verrez que si le dernier paramètre est une fonction, il la traitera comme un rappel.
J'ai écrit cet extrait pour mes propres tâches:
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" ));