Browserify 错误结束 gulp 监视任务

Browserify errors ending gulp watch task

我的 gulpfile.js 中有以下设置:

gulp.task('browserify', function() {
    browserify(config.paths.browserifyEntry)
        .transform(reactify)
        .bundle()
        .pipe(source('master.js'))
        .pipe(gulp.dest(config.paths.dist))
        //.pipe(connect.reload());
});

gulp.task('watch', function () {
    gulp.watch(config.paths.components, ['browserify']);
    gulp.watch(config.paths.sassSource, ['sass']);
});

在我编写导致 browserify 错误的代码之前,这一切都完美无缺。这种情况经常发生,因为我正在编辑一个文件中的代码,该文件依赖于我尚未在另一个文件中进行的更改,browserify 错误。

问题是,当 browserify 出错时,它会结束监视任务。我希望当 browserify 出错时,它根本没有完成它的任务,但手表会继续,这样当我进行其他允许 browserify 成功 运行 的更改时,它就会这样做。当您的代码处于错误状态时,进行更改然后重新加载浏览器并发现它不起作用只是发现由于 browserify 错误导致 watch 进程结束是有问题的。

有没有办法吞下那个错误,这样它就不会停止监视进程?或者是否有另一个 npm 包可以监视文件并且不会被 browserify 错误绊倒?

如果您不处理 error 事件,流将抛出。您可以直接处理事件:

gulp.task('browserify', function() {
    browserify(config.paths.browserifyEntry)
        .transform(reactify)
        .bundle()
        .on('error', console.error.bind(console))
        .pipe(source('master.js'))
        .pipe(gulp.dest(config.paths.dist));
});

或者您可以在错误抛出后捕获错误:

process.on('uncaughtException', console.error.bind(console));

对于 Browserify 流,您需要在错误处理程序中调用 emit

gulp.task('browserify', function() {
  browserify(config.paths.browserifyEntry)
  .transform(reactify)
  .bundle()
  .on('error', function (error) {
    console.error(error.toString())
    this.emit('end')
  })
  .pipe(source('master.js'))
  .pipe(gulp.dest(config.paths.dist));
});