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

时间:2017-02-02 16:37:14

标签: javascript node.js gulp browserify node-streams

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

由于我想观察这个过程并且如果其中一个文件中存在错误(语法或其他内容)而没有退出,我需要正确地向父流发送end事件。

用于处理我使用approach described in the gulp recipes

的多个文件

但是使用它并阅读docs on gulp-tap我不确定如何让它将错误发送到父流中。

我要做的是以下内容:

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(),我可以看到错误,但我没有丝毫知道如何将其恢复到父流中。

1 个答案:

答案 0 :(得分:1)

我设法做到了这样:

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
});