Я пытаюсь преобразовать свой sass в сжатый css и javascript в uglified-js. И watch изменения в scss и js
мой код работает, но когда я попытался сохранить файл js, он зациклился.
Вот мой код:
var gulp = require('gulp');
var sass = require('gulp-sass');
var uglify = require('gulp-uglify');
var concat = require('gulp-concat');
gulp.task('sass', function(done){
gulp.src('public/sass/**/*.scss')
.pipe(sass({outputStyle: 'compressed'})) // Using gulp-sass
.pipe(gulp.dest('public/stylesheets'))
done();
});
gulp.task('scripts', function(done){
gulp.src('public/javascripts/**/*.js')
.pipe(concat('scripts.js'))
.pipe(uglify())
.pipe(gulp.dest('public/javascripts'))
done();
});
gulp.task('watch', function(){
//I made .scss and .js into an array so they will both be watched
gulp.watch(['public/sass/**/*.scss', 'public/javascripts/**/*.js' ], gulp.series('sass', 'scripts', function(done) {
done();
}))
})
Теперь, когда я запускаю gulp watch, он работает, но затем, когда я сохраняю файл js, я вхожу в цикл сохранения, он сохраняет, сохраняет и сохраняет без остановок.
Я заставил scss работать с этим кодом
gulp.task('watch', function(){
gulp.watch('public/sass/**/*.scss', gulp.series('sass', 'scripts', function(done) {
done();
}))
})
Но я понятия не имею, как я могу просматривать файлы .js.
Я искал в Google возможный ответ, но нашел только старую версию решения. Есть ли способ сделать это с gulp4?
gulp.parallel но все равно зацикливаетсяПожалуйста помоги. Спасибо



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я решил это, сделав это:
gulp.task('watch', function(){
//I added the src folder instead of the glob **(two asterisk)
gulp.watch(['public/sass/**/*.scss', 'public/javascripts/src/*.js'], gulp.series('sass', 'scripts', function(done) {
done();
}))
})
Я не знаю, почему это произошло, но теперь это работает
Ваш исходный код:
gulp.task('watch', function(){
//I made .scss and .js into an array so they will both be watched
gulp.watch(['public/sass/**/*.scss', 'public/javascripts/**/*.js' ], gulp.series('sass', 'scripts', function(done) {
done();
}))
})
должно быть
gulp.task('watch', function(done){
// added done above too
gulp.watch('public/sass/**/*.scss', gulp.series('sass') )
gulp.watch('public/javascripts/**/*.js', gulp.series('scripts') )
done();
})
Ваш код запускает задачи обе'sass' и 'scripts' при изменении либо файла scss или js, что расточительно (например, задача 'sass' запустится при изменении файла js, но на самом деле ничего не сделает с этим файлом js, но будет без необходимости запускать перекомпиляция sass, хотя файл scss не изменился).
Спасибо за это, я новичок в gulp, и все уроки, которые я видел, чрезвычайно сложны для понимания.