Я смог воссоздать ваш код и заставить его работать следующим образом:
При создании ваших сложных задач, кажется, происходит что-то глупое, потому что вы создали серию задач для запуска с вашим gulp.task('serve')
.Вместо этого вы можете записать свои задачи следующим образом:
gulp.task(clean);
gulp.task(images);
gulp.task(serve);
gulp.task('default', gulp.series(clean, images, webp, serve));
Возможно, вы захотите вызвать вашу webp
функцию как-нибудь еще - у меня возник конфликт из-за импорта gulp-webp
как const = webp
.Вам также не нужно ставить кавычки вокруг имени функции в задаче, а затем снова ссылаться на нее в задаче.Так что gulp.task(clean)
работает просто отлично.Вам не нужно gulp.task('clean', clean)
.
Вероятно, вы также можете написать задание по умолчанию следующим образом:
gulp.task('default', gulp.series(clean, serve);
Это дало тот же эффект для меня, что и включение изображений и задач webpв серии.Эта установка работала для меня.Запустив gulp
, он сначала запустил функцию очистки для удаления папки public_img
, затем запустил images
и затем webp
.Это работало как при первом запуске, так и при добавлении нового изображения в папку preimages
.
Обновление
Вот полный gulpfile, который я получил для работы:
const gulp = require('gulp');
const imagemin = require('gulp-imagemin');
const rimraf = require('rimraf');
const webp = require('gulp-webp');
const folder = {
preimages: 'src/images',
public_img: 'src/public_img',
};
function clean(done) {
rimraf(folder.public_img, done);
}
function images() {
return gulp
.src([folder.preimages + '/**/*.{gif,png,jpg,svg}'])
.pipe(imagemin())
.pipe(gulp.dest(folder.public_img));
}
function webpTask() {
return gulp
.src([folder.preimages + '/**/*.{gif,png,jpg}'])
.pipe(webp())
.pipe(gulp.dest(folder.public_img));
}
function serve() {
gulp.watch(folder.preimages + '/**/*.{gif,png,jpg,svg}', images);
gulp.watch(folder.preimages + '/**/*.{gif,png,jpg}', webpTask);
}
gulp.task('clean', clean);
gulp.task('images', images);
gulp.task('default', gulp.series('clean', 'images', webpTask, serve));
Примечания. Я удалил задачу gulp serve
.Я не мог заставить это работать при любой конфигурации.Я думаю, что вы столкнулись с конфликтом, назвав и задачу, и функцию serve
, хотя я не на 100% уверен.Я изменил имя задачи webp
на webpTask
, так как получал конфликт, называя импорт webp и функцию webp webp
.Я не включил ни один из параметров конфигурации webp () или imagemin (), но это не должно иметь значения.
Вы также сможете удалить вызовы для images
и webpTask
функции в задаче gulp default
, так как запуск функции serve
должен запускать оба из них.
Эта настройка работала для меня одновременно при добавлении новых изображений в мою папку preimages
, когда задача gulp default
былаработает так же, как и при перезапуске задачи gulp default
.
К вашему сведению: я использую версию gulp 4.0.1., но я не думаю, что это должно иметь значение для этого.