我正在设置一个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()调用,我会看到错误,但是我丝毫不知道如何将其返回到父流中。

最佳答案

我设法做到这一点:

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

关于javascript - 我如何向gulp-tap的父流发出事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42007556/

10-12 15:58