2017-02-02 2 views
1

Ich richte eine gulpfile ein, um mehrere JavaScript-Dateien während der Entwicklung in mehrere Bundles zu bündeln.Wie gebe ich ein Ereignis in den übergeordneten Stream von gulp-tap aus

Da ich diesen Prozess beobachten und es nicht beenden möchte, wenn es einen Fehler (Syntax oder etwas) in einer der Dateien gibt, müsste ich ordnungsgemäß ein end Ereignis an den übergeordneten Stream ausgeben.

Für die Handhabung der mehreren Dateien verwende ich die approach described in the gulp recipes.

Aber mit dieser und das Lesen der docs on gulp-tap Ich bin mir nicht sicher, wie es den Fehler in den übergeordneten Stream emittieren.

Was ich versuche zu tun, die folgenden:

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/')) 
)); 

ich den Fehler sehen kann, wenn ich einen Rückruf an den bundle() Anruf passieren würde, aber ich habe nicht die geringste Ahnung, wie sie zurück zu bekommen in den übergeordneten Stream.

Antwort

1

schaffte ich es, wie dies zu tun:

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