Каждой функции задачи gulp передается обратный вызов в качестве первого аргумента, чтобы вы могли сигнализировать о завершении задачи.
В вашей задаче compile_scss
вы должны сообщить об асинхронном завершении, выполнив этот вызов задачиконец.
//compile SCSS
gulp.task('compile_scss', function(done){
return gulp.src(SCSS_SRC)
.pipe(sass().on('error', sass.logError))
.pipe(minifyCSS())
.pipe(rename({ suffix: '.min' }))
.pipe(changed(SCSS_DEST))
.pipe(gulp.dest(SCSS_DEST))
.on('end', function(error) {
if (error) {
// Handle errors if any
}
// Signal that the task is over
done();
})
});
Кроме того, вам не нужно переносить задачу watch
в gulp.series
.Это может (должно?) Быть так:
//detect changes in SCSS
gulp.task('watch_scss', function() {
return gulp.watch(SCSS_SRC, gulp.series('compile_scss'));
});
Наконец, если ничего из этого не работает, попробуйте передать опцию usePolling
наблюдателю:
gulp.task('watch_scss', {usePolling: true}, function() { ...
В некоторых системах, это необходимо для правильной работы.Вы можете проверить весь API Chkidar здесь (Chokidar - это библиотека, используемая gulp для просмотра файлов)
EDIT: в compile_sass
задача должна вернуть канал.