Gulp Browserify中的标准错误日志

Den*_*ret 7 javascript build node.js gulp babeljs

有了这个任务:

gulp.task("es6", function () {
      return browserify({entries: 'src/main/es6/main.js', extensions: ['.js'], debug: true})
      .transform(babelify)
      .bundle()
      .pipe(source('superpos.js'))
      .pipe(streamify(uglify()))
      .pipe(gulp.dest('src/main/webapp'));
});
Run Code Online (Sandbox Code Playgroud)

我得到这种错误日志:

在此输入图像描述

它很清晰漂亮,我喜欢它.

但是为了让我的手表保持运行,我需要处理错误而不是让它通过,比如说

  ...
  .transform(babelify)
  .bundle()
  .on('error', function(error){
        // pretty error print
        this.emit('end');
  })
  ...
Run Code Online (Sandbox Code Playgroud)

如何在此处重现相同的错误日志?

我宁愿通过组合chalk,gutil和读取错误文件来避免痛苦地再现它,但是以某种方式使用相同的函数.

Den*_*ret 2

事实证明,browserify 使用语法错误模块,因此抛出包含控制台就绪codeFrame属性的丰富错误对象。

我可以这样拦截错误:

gulp.task("es6", function () {
      return browserify({entries: 'src/main/es6/main.js', extensions: ['.js'], debug: true})
      .transform(babelify)
      .bundle()
      .on('error', function(err){
            if (err instanceof SyntaxError) {
                  gutil.log(gutil.colors.red('Syntax Error'));
                  console.log(err.message);
                  // console.log(err.filename+":"+err.loc.line);
                  console.log(err.codeFrame);
            } else {
                  gutil.log(gutil.colors.red('Error'), err.message);
            }
            this.emit('end');
      })
      .pipe(source('superpos.js'))
      .pipe(streamify(uglify()))
      .pipe(gulp.dest('src/main/webapp'));
});
Run Code Online (Sandbox Code Playgroud)

其中 gutil 是gulp-util

对于这个结果:

在此输入图像描述