Как смотреть sass и javascript одновременно в gulp 4 - PullRequest
1 голос
/ 06 марта 2019

Я пытаюсь преобразовать свой 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, но он все еще зациклен

Пожалуйста, помогите.Спасибо

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Ваш оригинальный код:

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 не изменился).

0 голосов
/ 06 марта 2019

Я решил это следующим образом:

 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();
  }))

})

Я не знаю, почему это произошло, но сейчас оно работает

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