Bunyk
Bunyk

Reputation: 8067

Gulp location of unhandled error in events.js:141

When I run task for example using comman gulp scripts:common, I get this output:

[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

Well, for SyntaxError it would be useful to know where it found that unexpected token. How to tell it to show at least file and line? Where to find that evetns.js file? Could I put console.trace() or something like that there?

Upvotes: 0

Views: 1268

Answers (3)

Bunyk
Bunyk

Reputation: 8067

Also, as another variant, adding gulp-plumber into pipeline makes error messages more clear.

Upvotes: 0

V. Gamula
V. Gamula

Reputation: 5629

You can look at error stack trace by adding custom "on error" handler to the gulp task.

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

Upvotes: 1

Siegmeyer
Siegmeyer

Reputation: 4512

I solve this problem by running jshint on my scripts:

/*
 * `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 is there to allow errors to pass in local environment but fail in production.

This will lint any syntax errors in your scripts. Additionally you may want to hook it to other task so it's run automatically before proper build:

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

This is the general idea.

Upvotes: 1

Related Questions