javascript - Gulp 使用 browserSync 观看

标签 javascript gulp node-streams

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

  1. 运行监视任务,在任何模板更改时重建 Handlebars 模板。
  2. 如果构建失败,它会通过notify()方法通知BrowserSync,这样如果出现问题,我可以在浏览器中看到弹出窗口。 watch 不应停止。
  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 function 。您可以将您的 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();
    }
  });
});

关于javascript - Gulp 使用 browserSync 观看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39040401/

相关文章:

node.js - 如何在Windows 8.1上安装nodejs依赖项?

javascript - 使用 jest 对 NodeJS 流进行单元测试 - 超时问题

node.js - 考虑背压,将数据从 Cassandra 流式传输到文件

javascript - 如何在 iframe 中实现 Frame Buster Javascript

javascript - 表格内可拖动的div

angularjs - 在 Controller 中找不到 fs

node.js - 如何将Web Stream转换为NodeJS原生Stream

javascript - 等待带有 v-card 的 v-dialog 需要 Vue.js 的透明背景

javascript - Google 图表选择事件中未定义列索引

bower - Gulp 任务来捆绑 Bower_Components?