如何将事件发送到gulp-tap的父stream中

我正在设置一个gplp文件,在开发过程中将多个JavaScript文件捆绑到多个捆绑包中。

因为我想观察这个过程,如果在其中一个文件中有错误(语法或其他),我将需要正确地向父stream发送一个end事件,不要退出。

为了处理多个文件,我使用了gulp食谱中描述的方法 。

但是,使用这个和阅读文档上的吞咽水龙头,我不确定如何让它发送到父stream的错误。

我想要做的是以下几点:

 gulp.task('bundle', () => ( gulp.src(['whatevs/*.js'], { read: false }) .pipe($.tap((file) => { file.contents = browserify( // eslint-disable-line no-param-reassign file.path, { debug: true, fullPaths: true } ).bundle(); })) .on('error', function handleBrowserifyError(err) { this.emit('end'); }) .pipe(gulp.dest('bundles/')) )); 

我可以看到错误,如果我将传递给bundle()调用的callback,但我没有丝毫的线索如何将其返回到父stream。

我设法做到这一点:

 gulp.task('bundle', () => { const scriptStream = gulp.src(['whatevs/*.js'], { read: false }) .pipe($.tap((file) => { file.contents = browserify( // eslint-disable-line no-param-reassign file.path, { debug: true, fullPaths: true } ) .bundle() .on('error', () => scriptStream.emit('end')); })) .on('error', Function.prototype) // prevents crashing .pipe(gulp.dest('bundles/')); return scriptStream });