2016-07-25 15 views
0

Ich verwende Gulp, um meine Typescript Anwendung für Node.js zu erstellen.Gulp Dateiverarbeitung in 2 Iterationen

Für meine Zwecke muss ich alle .ts Dateien scannen, einige Informationen abrufen und diese Informationen an einige der .ts Dateien anhängen.

Ich verwende gulp-modify, um meinen Dateihandler in die pipe() zu injizieren.

gulp.task(...., function() { 
    return gulp.src('*.ts') 
     .pipe(modify(statisticsProccesor)) 
     .pipe(modify(injectData)) 
     .pipe(gulp.dest(...)) 
}); 

Wo statisticsProccesor und injectData sind function(file, content) Implementierungen genaue Datei aus Quellen Strom zu verarbeiten.

Mit diesem Ansatz kann ich einige Statistiken aus Quellen abrufen. Aber ich kann es nicht zurück injizieren, weil gulp.src() alle Dateien einzeln verarbeitet (und alle Handler auch aufruft).

Sobald ich habe 2 Dateien 1.ts und 2.ts diese Aufgabe wird es in einem solchen Auftrag bearbeiten:

1.ts: statisticsProccesor(), injectData() 
2.ts: statisticsProccesor(), injectData() 

während ich solche Magie tun müssen, um:

1.ts: statisticsProccesor() 
1.ts: statisticsProccesor() 
2.ts: injectData() 
2.ts: injectData() 

Ich habe versucht 2 hinzufügen gulp.src().pipe(modify) Befehle an die Aufgabe. Und auch, um diese Teile auf 2 verschiedene Aufgaben zu trennen, um eins nach dem anderen zu starten. Aber Gulp optimiert die Ausführung, daher kann ich keine Quellen vorlaufen lassen und sie zweimal durchlaufen.

+1

Sie ** ** kann dies mit zwei Aufgaben. Sie müssen nur die Reihenfolge der Ausführung angeben: http://stackoverflow.com/questions/22824546/ –

Antwort

0

Wie erwähnt Sven ist es notwendig, Aufgabe in wenige abhängige Aufgaben zusammenzufassen.

gulp.task('doGood, ['subDo'], function(callback) { 
    gulp.src('*.ts') 
     .pipe(modify(statisticsProccesor)) 
     .on('finish', callback); 
}); 

gulp.task('subDo', function(callback) { 
    gulp.src('*.ts') 
     .pipe(modify(injectData)) 
     .pipe(gulp.dest(...)); 
}); 

gulp doGood 

paar wichtige Dinge:

1. `subDo` should not return the stream 
2. `subDo` should contain `on('finish')` instruction