Как отправить событие в родительский поток 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
});