繁体   English   中英

带有浏览器同步功能的Gulp手表

[英]Gulp watch with browserSync

我正在尝试编写一个执行以下操作的gulp文件:

  1. 运行监视任务,该任务可在任何模板更改时重建手把模板。
  2. 如果构建失败,它将通过notify()方法通知BrowserSync,这样,如果出现问题,我可以在浏览器中看到弹出窗口。 手表不应该停止。
  3. 如果构建正常,它将调用browserSync.reload()。

所以我想出了以下代码:

function SomeTask() {
  return gulp.src('*.hbs')
         .pipe(plumber())
         .pipe(somePlugin1())
         .pipe(somePlugin2())
         .pipe(gulp.dest('dest'));
}

gulp.watch(['*.hbs'], function(event) {
  SomeTask()
  .on('error', function(error) {
    browserSync.notify('ERROR!');
  })
  .on('end', browserSync.reload)
})

问题是,如果我使用gulp-plumber'end'事件,则发出该事件,并调用browserSync.reload()。 因此,我没有在浏览器中看到任何错误通知。 另一方面,如果没有“管道工”,则任何构建错误都会中断监视任务。

有任何想法吗?

gulp-plumber让我们提供一个自定义的errorHandler函数 您可以在其中放置browserSync.notify()调用:

function SomeTask(handler) {
  return gulp.src('*.hbs')
    .pipe(plumber({errorHandler: handler}))
    .pipe(somePlugin1())
    .pipe(somePlugin2())
    .pipe(gulp.dest('dest'));
}

gulp.watch(['*.hbs'], function(event) {
  var failed = false;
  SomeTask(function(error) {
    browserSync.notify('ERROR: ' + error.message);
    console.log(error.toString());
    failed = true;
  })
  .on('end', function() {
    if (!failed) {
      browserSync.reload();
    }
  });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM