Я хочу определить задачу Gulp 4, которая представляет собой композицию из трех функций, выполняемых последовательно. Тем не менее, я хочу, чтобы определить его как именованной функции, а не с помощью gulp.task()
:Gulp 4: Как использовать gulp.series() и gulp.parallel() внутри функции?
function beforeTest() { ... }
function coreTest() { ... }
function afterTest() { ... }
export function test() {
// what goes here?
// this function should be equivalent to:
// gulp.task('test', gulp.series(beforeTest, coreTest, afterTest));
}
Я нашел подобный question задал на вопрос трекера Глоток GitHub, где ОП пытался эквивалент следующее:
export function test() {
return gulp.series(beforeTest, coreTest, afterTest);
}
Причина, по которой это не работает, объясняется в проблеме GitHub. Рекомендуемое решение команды Глоток было не использовать указанную функцию, но и достаточно назначить сложную функцию переменной:
export const test = gulp.series(beforeTest, coreTest, afterTest);
Однако это решение оказывается недостаточным по нескольким причинам.
Первый недостаток был поднят в comment по вопросу GitHub об ограничении это место на упорядочении задач (то, что я уже пытался избежать с помощью именованных функций вместо gulp.task()
из-за новый requirement в Глотке 4, имена задач должны быть зарегистрированы до их ссылки).
Второй недостаток более косметический (и, таким образом, запускает мой OCD :-)). При запуске gulp test
композит test
задачи отображается в выводе:
[00:00:00] Starting 'test'...
[00:00:00] Starting 'beforeTest'...
[00:00:00] Finished 'beforeTest' after 106 ms
[00:00:00] Starting 'coreTest'...
[00:00:00] Finished 'coreTest' after 214 ms
[00:00:00] Starting 'afterTest'...
[00:00:00] Finished 'afterTest' after 280 μs
[00:00:00] Finished 'test' after 324 ms
Однако, если у меня есть еще один композиционная задача, которая ссылается test
, такие как:
gulp.task('build', gulp.parallel(lint, test));
Затем, когда я бег gulp build
, в композиционный test
задача не отображается на выходе:
[00:00:00] Starting 'build'...
[00:00:00] Starting 'lint'...
[00:00:00] Starting 'beforeTest'...
[00:00:01] Finished 'beforeTest' after 1.08 s
[00:00:01] Starting 'coreTest'...
[00:00:02] Finished 'coreTest' after 977 ms
[00:00:02] Starting 'afterTest'...
[00:00:02] Finished 'afterTest' after 232 μs
[00:00:07] Finished 'lint' after 6.96 s
[00:00:07] Finished 'build' after 6.96 s
Я подозреваю, что т его может быть потому, что Gulp не отображает функцию, имя которой series
или parallel
. Я попытался установить test.displayName
, как это было предложено в вопросе GitHub:
export const test = gulp.series(beforeTest, coreTest, afterTest);
test.displayName = 'test';
Но это не изменило выход gulp build
. Я также попытался установить test.name
, но это свойство, как представляется, быть заморожено:
TypeError: Cannot assign to read only property 'name' of function 'function series(done) {
nowAndLater.mapSeries(args, asyncDone, extensions, done);
}'
кажется, что если бы я мог определить композиционный test
задачу именованной функции, он будет рассматривать оба эти недостатки. Итак, в целом, как бы я определил тело функции test
, показанной в верхней части этого вопроса?