捕获Browserify解析错误(独立选项)

Lau*_*eld 21 node.js browserify gulp

我正在使用gulp + browserify来构建和打包我的javascript库.现在有一件事困扰着我:我正在通过gulp运行一个带有livereload的简单服务器进行开发.这工作正常,但每当我的javascript包含语法错误时,browserify会抛出一个错误导致服务器停止.

我使用的browserify代码(注意我添加了一个错误处理程序):

browserify("./src/main.js")
   .bundle({standalone: "SomeName", debug: false}).on('error', notify.onError({
            message: "Error: <%= error.message %>",
            title: "Failed running browserify"
    })
);
Run Code Online (Sandbox Code Playgroud)

现在出现了一个有趣的部分:当我删除独立设置(并且我的js语法不正确)时,错误处理程序将触发.但是,当我使用此独立设置时,错误处理程序不会触发(导致服务器通过gulp停止启动)

有人知道如何处理这个问题吗?我总是可以在gulp中手动验证我的js文件,但是我想避免这种解决方法

tmt*_*txt 59

on('error')事件仍然被解雇.但是,bro​​wserify流与其他Gulp流有点不同.在browserify的错误处理函数中,您需要显式调用this.emit("end")

一个示例gulp任务

var browserify = require('browserify');
var gulp = require('gulp');
var source = require("vinyl-source-stream");
var reactify = require('reactify');

gulp.task('browserify', function(){
  // create new bundle
  var b = browserify();
  // add transform if you want
  b.transform(reactify);
  // add file to browserify
  b.add("./src/main.js");
  // start bundling
  return b.bundle()
    .on('error', function(err){
      // print the error (can replace with gulp-util)
      console.log(err.message);
      // end this stream
      this.emit('end');
    })
    .pipe(source('main.js'))
    // pipe other plugin here if you want
    .pipe(gulp.dest('./dist'));
});
Run Code Online (Sandbox Code Playgroud)

错误函数处理程序阻止gulp崩溃,this.emit("end")停止当前流,不让它运行到下一个管道.事件处理程序还可以捕获转换插件中的错误.

有关详细信息,请参阅http://truongtx.me/2014/07/15/handle-errors-while-using-gulp-watch/

  • 尝试`this.emit("end")`而不是`this.end()` - 为我工作. (10认同)
  • 当我使用这种方法时,即使问题的根源得到纠正,'gulp.watch'也会在第一次失败后停止更新.有没有办法防止中断手表? (4认同)
  • 如果这个答案得到更新,那就太棒了 this.emit('end')似乎是要去的方式而不是this.end() (2认同)
  • 不,对我不起作用.我有这个`this.emit('end');`但它没用,进程仍然会冻结错误发生. (2认同)
  • 对于任何有错误的人说'this.emit`不是一个函数,请确保你没有使用箭头函数......`这个`在他们内部表现得非常不同(很难找到它) (2认同)