Задание «по умолчанию» завершается без выполнения обратного вызова - PullRequest
0 голосов
/ 20 июня 2019

Я недавно обновил с gulp 3 до 4 - у меня есть руководства по обновлению, и я изменил свой код в соответствии с требованиями, но у меня все еще странное поведение.

Вот небольшой воспроизводимый случай:

gulp.task('do-nothing', function (done) {
    setTimeout(function () {
        done()
    }, 3 * 1000)
})

gulp.task("default", gulp.parallel("do-nothing"), function (done) {
    console.log(`\n\n\nWHY AM I NOT BEING RUN`)
})

Когда выполняется gulp, вывод:

[14:10:57] Using gulpfile ~\Code\certsimple\gulpfile.js
[14:10:57] Starting 'default'...
[14:10:57] Starting 'do-nothing'...
[14:11:00] Finished 'do-nothing' after 3.01 s
[14:11:00] Finished 'default' after 3.02 s

На консоль не выводится WHY AM I NOT BEING RUN.

Почему это?

Ответы [ 3 ]

1 голос
/ 20 июня 2019
gulp.task('do-nothing', function (done) {
setTimeout(function () {
    done()
}, 3 * 1000)
})

gulp.task("default", gulp.parallel("do-nothing", function (done) {
    console.log(`\n\n\nWHY AM I NOT BEING RUN`)
}))

Это то, что вы ищете, функция является третьим аргументом gulp.task, который мне не подойдет. Точно так же, gulp.parallel только с одной задачей на входе должен быть таким же, как и сам tast.

1 голос
/ 20 июня 2019

У вас есть эта строка:

gulp.task("default", gulp.parallel("do-nothing"), function (done) {

Обратите внимание, что он имеет три аргумента: строковое имя задачи, gulp.parallel () и анонимный вызов функции. Это синтаксис gulp3. Вот подпись функции gulp4 task:

task([taskName], taskFunction)  // note only **two** arguments.

Из gulp 4 документация для task подпись .

Вот почему ваш console.log никогда не достигается. Так что вам просто нужно поместить анонимную функцию в аргумент gulp.parallel, чтобы исправить это.

gulp.task("default", gulp.parallel("do-nothing", function (done) {
    console.log(`\n\n\nWHY AM I NOT BEING RUN`)
}));

Кроме того, поскольку вы используете gulp.parallel, console.log не будет ждать окончания do-nothing.

0 голосов
/ 20 июня 2019

Это должно работать.

gulp.task('do-nothing', function (done) {
    setTimeout(function () {
        done()
    }, 3 * 1000)
})

gulp.task("default",

    gulp.parallel("do-nothing", function (done) {
      console.log(`\n\n\nWHY AM I NOT BEING RUN`)
      done()
    })

);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...