2015-02-01 2 views
7

Ich frage mich, ob es eine Möglichkeit gibt, diese zwei separaten Aufgaben in einem zu kombinieren.Mehrere src-Streams im Schluck kombinieren?

Dieser Task erfordert, dass eine generierte Datei vor dem Ausführen vorhanden ist. Die Aufgabe cache-angular-templates generiert diese Datei. Die erzeugte Datei muss in den Ausgang concat aufgenommen werden. Nachdem concat-js fertig ist, kann die Datei gelöscht werden — es wird nicht mehr benötigt.

Es scheint, dass ich irgendwie in der Lage sein sollte, den in cache-angular-tempaltes verwendeten Strom in den Strom concat-js zu leiten.

gulp.task('concat-js', ['cache-angular-templates'], function() { 
    var concatOutputPath = path.dirname(paths.compiledScriptsFile), 
     concatOutputFileName = path.basename(paths.compiledScriptsFile), 
     jsFiles = [].concat(
      paths.libScripts, 
      paths.appScripts, 
      paths.templateScriptFile, 
      notpath(paths.compiledScriptsFile), 
      notpath(paths.specMockScripts), 
      notpath(paths.specScripts) 
     ); 

    return gulp 
     .src(jsFiles) 
     .pipe(buildTools.concat(concatOutputFileName)) 
     .pipe(gulp.dest(concatOutputPath)) 
     .on('end', function() { 
      del(paths.templateScriptFile); 
     }) 
    ; 
}); 

gulp.task('cache-angular-templates', function() { 
    var cacheOutputPath = path.dirname(paths.templateScriptFile), 
     cacheOutputFileName = path.basename(paths.templateScriptFile); 

    var options = { 
     root: '/' + cacheOutputPath, 
     standalone: true, 
     filename: cacheOutputFileName 
    }; 

    return gulp 
     .src(paths.templates) 
     .pipe(buildTools.angularTemplatecache(options)) 
     .pipe(gulp.dest(cacheOutputPath)) 
    ; 
}); 

Antwort

14

der Tat sollten Sie sie zusammenführen, als eine der Ideen von Gulp ist intermediärsbasierten temporäre Dateien zu beseitigen.

Einer der Wege, dies zu erreichen ist durch:

  1. cache-angular-templates auf eine Funktion, die Umwandlung, die den Templat-Stream zurück, läßt es getTemplateStream nennen;
  2. Entfernen der .pipe(gulp.dest(cacheOutputPath)) daraus;
  3. mit event-stream, um die Datenströme vor der Verkettung in der Hauptaufgabe zusammenzuführen. Ihre Hauptaufgabe wäre so etwas wie dies geworden:
var es = require('event-stream'); 

gulp.task('concat-js', function() { 
    var concatOutputPath = path.dirname(paths.compiledScriptsFile), 
     concatOutputFileName = path.basename(paths.compiledScriptsFile), 
     jsFiles = [].concat(
      paths.libScripts, 
      paths.appScripts, 
      notpath(paths.compiledScriptsFile), 
      notpath(paths.specMockScripts), 
      notpath(paths.specScripts) 
     ); 

    return es.merge(gulp.src(jsFiles), getTemplateStream()) 
     .pipe(buildTools.concat(concatOutputFileName)) 
     .pipe(gulp.dest(concatOutputPath)); 
}); 

function getTemplateStream() { 
    var options = { 
     root: '/' + cacheOutputPath, 
     standalone: true, 
     filename: cacheOutputFileName 
    }; 

    return gulp 
     .src(paths.templates) 
     .pipe(buildTools.angularTemplatecache(options)); 
} 

Auf diese Weise werden Sie die beiden Ströme Zusammenführen und die Ausgabedatei Ihres getTemplateStream wird das Rohr herabgesandt werden.

+3

Super! Ich danke dir sehr! Genau das habe ich gesucht. Ich bin froh, dass du nicht darauf gekommen bist, ob ich tun sollte, was ich tat; Ich wollte nur wissen * wie * das Muster anzuwenden, wenn ich es brauche. Danke noch einmal! – core

+1

+1 Normalerweise kommentiere ich keine Lösungen, die für mich funktionieren, aber ich habe die letzten sechs Stunden damit verbracht, zu googeln und Dokumente zu lesen, um herauszufinden, wie man mehrere gulp.src-Aufrufe zusammenführt und das ist das Einzige, was ich gefunden habe Arbeit. Hervorragende Antwort! –

+0

Wie oben. Es ist verwirrend, dass Event-Stream-Merges und Merge-Stream-Paket etwas subtil, aber deutlich anders macht. Danke für die Dokumentation! – RobW