【问题标题】:Gulp watch task is not working when sass/js/html file is saved保存 sass/js/html 文件时,Gulp 监视任务不起作用
【发布时间】:2022-02-02 13:45:50
【问题描述】:

我正在尝试在 scss、HTML 和 js 文件更改时重新加载浏览器,但是当我运行 gulp watch 命令时,它没有重新加载浏览器或看不到任何 css/js/html 更改。

var gulp = require('gulp');
// Requires the gulp-sass plugin
var sass = require('gulp-sass');
var browserSync = require('browser-sync').create();

gulp.task('sass', function() {
    return gulp.src('app/scss/**/*.scss') // Gets all files ending with .scss in app/scss
        .pipe(sass())
        .pipe(gulp.dest('app/css'))
        .pipe(browserSync.reload({
            stream: true
        }))
});

gulp.task('browserSync', function() {
    browserSync.init({
        server: {
            baseDir: 'app'
        },
    })
})

gulp.task('watch', gulp.series(['browserSync', 'sass']), function() {
    gulp.watch('app/scss/**/*.scss', gulp.series('sass'));
    gulp.watch('app/*.html', browserSync.reload);
    gulp.watch('app/js/**/*.js', browserSync.reload);
});

【问题讨论】:

    标签: javascript sass gulp


    【解决方案1】:

    关于Mark's solution,如果您想看到实时重新加载,只需将.on('change', browserSync.relod)添加到所需手表的末尾即可:

    var gulp = require('gulp');
    // Requires the gulp-sass plugin
    var sass = require('gulp-sass');
    var browserSync = require('browser-sync').create();
    
    gulp.task('sass', function () {
      return gulp.src('app/scss/**/*.scss') // Gets all files ending with .scss in app/scss
        .pipe(sass())
        .pipe(gulp.dest('app/css'))
        .pipe(browserSync.reload({
          stream: true
        }))
    });
    
    gulp.task('browserSync', function (done) {
      browserSync.init({
        server: {
          baseDir: 'app'
        },
      });
      done();
    })
    
    gulp.task('watch', gulp.series('browserSync', 'sass', function () {
      gulp.watch('app/scss/**/*.scss', gulp.series('sass'));
      gulp.watch('app/*.html', browserSync.reload);
      gulp.watch('app/js/**/*.js', browserSync.reload);
      gulp.watch('app/scss/**/*.scss').on('change', browserSync.reload);
      gulp.watch('app/*.html').on('change', browserSync.reload);
      gulp.watch('app/js/**/*.js').on('change', browserSync.reload);
    }));
    
    

    【讨论】:

      【解决方案2】:

      您需要在此处进行一些更改:

      gulp.task('browserSync', function(done) {         // done added here
        browserSync.init({
          server: {
            baseDir: 'app'
          },
        });
        done();                                          // done() called here
      })
      
      // gulp.task('watch', gulp.series(['browserSync', 'sass']), function() {
      gulp.task('watch', gulp.series('browserSync', 'sass', function () {       // see note below
        
          gulp.watch('app/scss/**/*.scss', gulp.series('sass'));
      
          // gulp.watch('app/*.html', browserSync.reload);
      
          gulp.watch("app/*.html", { events: 'all' }, function(cb) {
            browserSync.reload();
            cb();
          });
      
          gulp.watch('app/js/**/*.js', browserSync.reload);
      }));                                                                       // added a )
      

      gulp.watch() 接受 2 个参数,而不是 3 个。gulp.series() 应该包括所有函数 - 包括包含 watch 调用的匿名函数。并丢失数组括号。

      【讨论】:

      • 好吧,我正在检查它
      • 在第一次 Html 更改时,它会显示更改,但如果我再次更改 html,则看不到更改。我必须重新加载页面
      • 哇,它工作正常 :) 所以我们需要为对象使用第二个参数,对吧?
      • 我还有一个问题:当我运行 gulp watch 命令时,它会将我定位到正在加载 index.html 页面的 localhost:3000。现在,如果我创建另一个 HTML 文件,那么如何在我进行更改时自动重新加载该页面?
      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多