Часы глотка не испускают объект события

Gulp (4.0) выдает ошибку "Error: Invalid glob argument: undefined" когда я пытаюсь gulp.src путь измененного файла, полученный из gulp.watch, Оба это:

gulp.task('watch', function() {
    gulp.watch('./web/**/*.html')
        .on('change', function(file) {
            gulp.src(file.path)
                .pipe(gulp.dest('./output'));
        });
});

и этот вариант синтаксиса:

gulp.task('watch', function() {
    gulp.watch('./web/**/*.html', function(file) {
        gulp.src(file.path)
            .pipe(gulp.dest('./output'));
    });
});

дать тот же результат.

Ведение файла file.path перед gulp.src также выводит "undefined".

Воспроизвести:

npm install -g gulp@github:gulpjs/gulp#4.0

и создать gulpfile.js содержащий:

const gulp = require('gulp');

сопровождаемый любым из примеров.

Насколько я понимаю, именно так путь измененного файла должен быть доступен в соответствии с документами, поэтому я не уверен, в чем я ошибаюсь?

1 ответ

Решение

Эта документация является неправильной. Например, это говорит о gaze события, но gaze больше не используется для отслеживания изменений файлов в gulp 4.0; он был заменен chokidar,

Относительно вашей проблемы, документы не правы о том, как вы должны получить доступ к пути к файлу. .on('change') функция обратного вызова не передана event объект, так что нет .path имущество.

Вместо этого путь к файлу передается в виде строки, поэтому ваш первый пример должен выглядеть следующим образом:

gulp.task('watch', function() {
    gulp.watch('./web/**/*.html')
        .on('change', function(file) {
            gulp.src(file)
                .pipe(gulp.dest('./output'));
        });
});

Функция обратного вызова в вашем втором примере вообще не получает путь. Это прошло done обратный вызов, чтобы облегчить выполнение задачи через gulp.series() или же gulp.parallel(),

Другие вопросы по тегам