Вам следует понимать, что все задачи Gulp - асинхронны. Что это значит, давайте посмотрим на примере. Пусть внутри публичной задачи вызываются две приватных:
function taskD(cb) {
task1(cb);
task2(cb);
cb();
}
Асинхронность означает, что задача task2
не будет дожидаться окончания выполнения
задачи task1
, а будет выполняться
параллельно с ней.
Давайте обдумаем это на более практическом примере. Пусть первая задача преобразует LESS в CSS, а вторая задача - минимизирует полученный CSS.
В таком случае мы столкнемся с проблемой: ведь нельзя минимизировать CSS файл до того, как в него попадет результат компиляции LESS!
Однако, если бы задачи выполнялись синхронно - последовательно одна за другой, мы столкнулись с другой проблемой: задачи, которые можно выполнить параллельно, выполнялись бы одна за другой, замедляя работу Gulp. Давайте также обдумаем это на примере.
Пусть первая задача минимизирует CSS файлы, а вторая задача - минимизирует JavaScript файлы. Очевидно, что эти две не связанные операции можно выполнять одновременно.
К счастью, Gulp предоставляет инструменты, позволяющие явно указать, какие задачи должны быть выполнены параллельно, а какие - последовательно. Эти инструменты мы разберем в следующем уроке.
Придумайте пример двух задач, которые должны выполняться только последовательно.
Придумайте пример двух задач, которые должны выполняться только параллельно.