如何将事件发送到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 });