在events.js:141中吞噬未处理错误的位置

时间:2016-08-05 14:16:12

标签: javascript debugging gulp traceback

当我使用comman gulp scripts:common运行任务时,我得到了这个输出:

[14:05:47] Requiring external module babel-core/register
[14:05:49] Using gulpfile /home/sites/blablabla/gulpfile.babel.js
[14:05:49] Starting 'scripts:common'...

events.js:141
      throw er; // Unhandled 'error' event
      ^
SyntaxError: Unexpected token

好吧,对于SyntaxError,知道它发现意外令牌的位置会很有用。如何告诉它至少显示文件和行?哪里可以找到evetns.js文件?我可以把console.trace()或类似的东西放在那里吗?

3 个答案:

答案 0 :(得分:1)

我通过在我的脚本上运行jshint解决了这个问题:

/*
 * `gulp check_scripts` - Lints script files
 */
gulp.task('check_scripts', function() {
  return gulp.src([
    'gulpfile.js' //, other scripts to check
  ])
  .pipe(jshint())
  .pipe(jshint.reporter('jshint-stylish'))
  .pipe(gulpif(enabled.failJSHint, jshint.reporter('fail')));
});

enabled.failJSHint允许错误在本地环境中传递但在生产中失败。

这将会破坏脚本中的任何语法错误。 此外,您可能希望将其挂钩到其他任务,以便在正确构建之前自动运行:

gulp.task('default', ['check_scripts', 'clean'], function() {
  gulp.start('build');
});

这是一般的想法。

答案 1 :(得分:1)

您可以通过向gulp任务添加自定义“on error”处理程序来查看错误堆栈跟踪。

gulp.task('compile:js', function() {
    return (
        gulp.src(jsPath)
        .pipe(yourCustomTask())
        .on('error', function(err) {
            console.log(err.stack);
            this.end();
        })
    );
});

答案 2 :(得分:0)

此外,作为另一种变体,将gulp-plumber添加到管道中会使错误消息更加清晰。