咕嘟咕嘟腕表采用browserSync

问题描述:

我想写一大口的文件,请执行下列操作:咕嘟咕嘟腕表采用browserSync

  1. 奔跑看任务,重建的任何模板变化把手模板。
  2. 如果构建失败,它会通过notify()方法通知BrowserSync,这样我就可以在浏览器中看到出现错误的弹出窗口。 手表不应停止。
  3. 如果构建正常,则调用browserSync.reload()。

于是我想出了代码以下PICE:

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

的问题是,如果我用大口,水管工“结束”事件是emmits和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(); 
    } 
    }); 
});