Давайте подведём итоги проделанной работы. На данный момент мы создали два разных набора gulp-задач.
Первый набор предназначен для процесса разработки, в этом наборе мы компилировали Sass в CSS, отслеживали изменения и перезагружали браузер.
Второй набор предназначен для процесса оптимизации, в этом наборе готовим все файлы для рабочего веб-сайта. В данном процессе мы оптимизировали такие ресурсы, как CSS, JavaScript и изображения, а также копировали шрифты из папки app в dist.
Мы уже группировали первый набор задач в простой рабочий процесс с помощью команды gulp watch:
Второй набор состоит из задач, которые нужно выполнить для создания рабочего веб-сайта. Этот набор включает в себя задачи clean:dist, sass, useref, images и fonts.
Если бы мы пошли схожим путём, то создали бы задачу build, которая объединила бы все задачи вместе.
К сожалению, так мы не сможем написать задачу build, потому что Gulp активирует все задачи во втором аргументе одновременно. Существует вероятность того, что задачи useref, images или даже fonts завершатся раньше задачи clean, в таком случае удалится вся папка dist.
Итак, для гарантии того, что очистка завершится до выполнения остальных задач, нам нужно использовать дополнительный плагин под названием Run Sequence.
Вот синтаксис выполнения последовательности задач:
Когда вызывается «имя-задачи», Gulp сначала запускает «задача-один». Когда эта задача завершается, Gulp автоматически запускает «задача-два». Наконец, когда «задача-два» выполнена, Gulp запускает «задача-три».
Run Sequence также позволяет запускать задачи одновременно, если поместить их в массив:
В данном случае Gulp сначала запускает «задача-один». Когда эта задача завершена, Gulp одновременно запускает каждую задачу во втором аргументе. Все задачи в этом втором аргументе должны быть выполнены до запуска «задача-три».
Теперь мы можем создать задачу, которая гарантирует, что сначала запустится clean: dist, а затем все остальные задачи:
Будем последовательны и проделаем то же самое с первой группой. На этот раз в качестве имени задачи укажем default:
Почему default? Потому что, когда у вас есть задача с таким именем, её можно выполнить, просто набрав команду gulp.
И, наконец, вот репозиторий GitHub для всей работы, которую мы проделали!
Первый набор предназначен для процесса разработки, в этом наборе мы компилировали Sass в CSS, отслеживали изменения и перезагружали браузер.
Второй набор предназначен для процесса оптимизации, в этом наборе готовим все файлы для рабочего веб-сайта. В данном процессе мы оптимизировали такие ресурсы, как CSS, JavaScript и изображения, а также копировали шрифты из папки app в dist.
Мы уже группировали первый набор задач в простой рабочий процесс с помощью команды gulp watch:
Код:
gulp.task('watch', ['browserSync', 'sass'], function (){
// …отслеживание
})
Если бы мы пошли схожим путём, то создали бы задачу build, которая объединила бы все задачи вместе.
Код:
gulp.task('build', ['clean', 'sass', 'useref', 'images', 'fonts'], function (){
console.log('Построение файлов…');
})
Итак, для гарантии того, что очистка завершится до выполнения остальных задач, нам нужно использовать дополнительный плагин под названием Run Sequence.
$ npm install run-sequence --save-dev
Вот синтаксис выполнения последовательности задач:
Код:
var runSequence = require('run-sequence');
gulp.task('имя-задачи', function(callback) {
runSequence('задача-один', 'задача-два', 'задача-три', callback);
});
Run Sequence также позволяет запускать задачи одновременно, если поместить их в массив:
Код:
gulp.task('task-name', function(callback) {
runSequence('задача-один', ['задача-два','выполняется','параллельно'], 'задача-три', callback);
});
Теперь мы можем создать задачу, которая гарантирует, что сначала запустится clean: dist, а затем все остальные задачи:
Код:
gulp.task('build', function (callback) {
runSequence('clean:dist',
['sass', 'useref', 'images', 'fonts'],
callback
)
})
Код:
gulp.task('default', function (callback) {
runSequence(['sass','browserSync', 'watch'],
callback
)
})
И, наконец, вот репозиторий GitHub для всей работы, которую мы проделали!