Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

compatibility with lazypipe #16

Open
cyrusdavid opened this issue Jun 2, 2014 · 5 comments
Open

compatibility with lazypipe #16

cyrusdavid opened this issue Jun 2, 2014 · 5 comments

Comments

@cyrusdavid
Copy link

It works well!

gulp.task('less', function() {
  return gulp.src('css/*.less', { cwd: 'app/**' })
  .pipe($.plumber())
  .pipe($.less())
  .pipe(gulp.dest('.tmp'));
});
[gulp] Starting 'less'...
[gulp] Plumber found unhandled error: [gulp] Error in plugin 'gulp-less': .make-
grid-columns is undefined in file bower_components\bootstrap\less\
grid.less line no. 48
[gulp] Finished 'less' after 314 ms

But with lazy pipe:

var less = lazypipe()
  .pipe($.less)
  .pipe(gulp.dest, '.tmp');

gulp.task('less', function() {
  return gulp.src('css/*.less', { cwd: 'app/**' })
  .pipe($.plumber())
  .pipe(less());
});
[gulp] Starting 'less'...
[gulp] 'less' errored after 317 ms .make-grid-columns is undefined in file bower_components\bootstrap\less\grid.less line no. 48

I also tried putting plumber inside the lazy pipe:

var less = lazypipe()
  .pipe($.plumber)
  .pipe($.less)
  .pipe(gulp.dest, '.tmp');

gulp.task('less', function() {
  return gulp.src('css/*.less', { cwd: 'app/**' })
  .pipe(less());
});
[gulp] Starting 'less'...
[gulp] 'less' errored after 317 ms .make-grid-columns is undefined in file bower_components\bootstrap\less\grid.less line no. 48
@floatdrop
Copy link
Owner

Last code snippet is working fine for me, but with small addition:

var gulp = require('gulp');

var lazypipe = require('lazypipe');
var gless = require('gulp-less');
var plumber = require('gulp-plumber');

var less = lazypipe()
  .pipe(plumber)
  .pipe(gless)
  .pipe(gulp.dest, 'tmp');

gulp.task('default', function() {
  return gulp.src('css/*.less')
    .pipe(less()
        .on('error', function (err) {
            console.log(err);
        }));
});

Lazystream uses stream-combiner inside, which returns one stream with one error handler for all underlying streams, so you get error object with information, from which stream it comes from:

[gulp] Using gulpfile /Users/floatdrop/gulp-lazypipe/gulpfile.js
[gulp] Starting 'default'...
{ plugin: 'gulp-less',
  showStack: false,
  name: 'Error',
  message: 'Unrecognised input in file /Users/floatdrop/gulp-lazypipe/css/1.less line no. 12',
  fileName: '/Users/floatdrop/gulp-lazypipe/css/1.less',
  lineNumber: 12 }

Gulp-plumber will not add it own error handler, if there is one already defined.

@avanderhoorn
Copy link

Even though the reference has come through to this issue, I've also run into this issue with the following floatdrop/gulp-watch#52.

@mgcrea
Copy link

mgcrea commented Oct 10, 2014

Encountering this as well. Adding .on() to the lazypipe instance is not an option in my case (exporting lazypipes as a node_module). @floatdrop Would having an option to force plumber attaching it's own error handler (even if there is already one attached) fix this?

@gligoran
Copy link

If anyone is still having problem with this, I found a work-around reading this article: http://lkrnac.net/blog/2014/10/watch-file-changes-propagate-errors-gulp. It provides this explanation:

Lazypipe isn’t integrated with gulp-plumber, so it is needed also in sub-pipe.

So, to make plumber not crash, include it in all of your pipes. It's not pretty, as there's all of a sudden a lot plumbers everywhere, but it works.

@floatdrop: Are there any dangers of not calling plumber.stop()?

@floatdrop
Copy link
Owner

@gligoran nope, it just restores original .pipe function, nothing else.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants