Skip to content

Instantly share code, notes, and snippets.

@just-boris
Last active April 10, 2019 20:59
Show Gist options
  • Star 20 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save just-boris/89ee7c1829e87e2db04c to your computer and use it in GitHub Desktop.
Save just-boris/89ee7c1829e87e2db04c to your computer and use it in GitHub Desktop.
Gulp wrap pipe
/**
* Wrap gulp streams into fail-safe function for better error reporting
* Usage:
* gulp.task('less', wrapPipe(function(success, error) {
* return gulp.src('less/*.less')
* .pipe(less().on('error', error))
* .pipe(gulp.dest('app/css'));
* }));
*/
function wrapPipe(taskFn) {
return function(done) {
var onSuccess = function() {
done();
};
var onError = function(err) {
done(err);
}
var outStream = taskFn(onSuccess, onError);
if(outStream && typeof outStream.on === 'function') {
outStream.on('end', onSuccess);
}
}
}
@NeXTs
Copy link

NeXTs commented Jun 2, 2015

Let's assume I have few consecutive actions in one task. I have to catch errors for each of them?
Somehow like this way?

gulp.task('styles', wrapPipe(function(success, error) {
  return gulp.src('less/*.less')
    .pipe(less().on('error', error))
    .pipe(autoprefixer().on('error', error))
    .pipe(minifyCss().on('error', error))
    .pipe(gulp.dest('app/css'));
}));

@just-boris
Copy link
Author

@NeXTs Yes, you should do so, because pipes do not propagate errors

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