Как отправить событие в родительский поток gulp-tap

Я настраиваю gulpfile для объединения нескольких файлов JavaScript в несколько пакетов во время разработки.

Так как я хочу наблюдать за этим процессом, а не завершать его, если в одном из файлов есть ошибка (синтаксис или что-то еще), мне нужно правильно выдать end событие в родительский поток.

Для обработки нескольких файлов я использую подход, описанный в рецептах глотка.

Но используя это и читая документы на 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 ответ

Решение

Мне удалось сделать это так:

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
});
Другие вопросы по тегам