Полный цикл в digital

Последовательное и паралельное выполнение задач Gulp

Вам следует понимать, что все задачи Gulp асинхронны. Давайте посмотрим на примере, пусть внутри публичной задачи вызываются две приватных:

gulpfile.jsfunction taskD(cb) {
  task1(cb);
  task2(cb);
  cb();
}

Асинхронность означает, что задача task2 не будет дожидаться окончания выполнения задачи task1, а будет выполняться параллельно с ней.

Пусть первая задача преобразует LESS в CSS, а вторая задача минимизирует полученный CSS. В таком случае мы столкнемся с проблемой: ведь нельзя минимизировать CSS файл до того, как в него попадет результат компиляции LESS.

Если бы задачи выполнялись синхронно, последовательно одна за другой, мы столкнулись бы с другой проблемой: задачи, которые можно выполнить параллельно, выполнялись бы одна за другой, замедляя работу Gulp.

Пусть первая задача минимизирует CSS файлы, а вторая задача минимизирует JavaScript файлы. Очевидно, что эти две не связанные операции можно выполнять одновременно. К счастью, Gulp предоставляет инструменты, позволяющие явно указать, какие задачи должны быть выполнены параллельно, а какие последовательно.

Группы задач

Задачи Gulp можно объединять в группы или композиции, явно указать на метод выполнения кода последовательно или параллельно.

Для примера возьмем следующие задачи:

gulpfile.jsfunction task1(cb) {
  cb();
}
function task2(cb) {
  cb();
}

Последовательное выполнение

Для последовательного выполнения задач предназначена функция series(). Эта функция параметрами принимает любое количество задач и выполняет их по очереди в порядке перечисления.

gulpfile.jsconst { series } = require('gulp');

Теперь мы можем воспользоваться этой функцией:

gulpfile.jsfunction taskD(cb) {
  series(task1, task2);
  cb();
}
exports.default = taskD;

Можно сразу экспортировать результат работы series, не создавая лишней функции для публичной задачи:

gulpfile.jsexports.default = series(task1, task2);

Параллельное выполнение

Для параллельного выполнения задач предназначена функция parallel(). Эта функция параметрами принимает любое количество задач и выполняет их паралельно.

gulpfile.jsconst { parallel } = require('gulp');

Теперь мы можем воспользоваться этой функцией:

gulpfile.jsfunction taskD(cb) {
  parallel(task1, task2);
  cb();
}
exports.default = taskD;

Можно сразу экспортировать результат работы parallel, не создавая лишней функции для публичной задачи:

gulpfile.jsexports.default = parallel(task1, task2);

Комбинации

Функции series() и parallel() можно вкладывать в друг друга в любых комбинациях:

gulpfile.jsexports.default = series(task1, parallel(task2, task3));
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг