Ich benutze Gulp, um Front-Materie zu sammeln (via Gulp-Front-Materie-Plugin) und dann, nach der Aggregation, ich speichere es in eine andere Datei. Neben anderen Daten speichere ich eine Menge CSS. Hier ist, was ich für meine compileCSS
Aufgabe haben:Wie laufen Sie einen Schluck "am Ende" Aufgabe aber nur am Ende der aktuellen Aufgabe?
var collected = [];
gulp.src('./client/**/*.html')
.pipe(frontMatter({ property: 'meta', remove: true }))
.pipe(through.obj(function(file, enc, callback) {
var css = file.meta;
collected.push(css);
}))
.pipe(gulp.dest('./build/templates'))
.on('end', function() {
var cssPath = ['build', 'assets', 'css', 'compiled.css'];
fs.writeFileSync(cssPath.join(path.sep), cssPath);
})
;
Die Aufgabe funktioniert wie erwartet (beachten Sie, es handelt sich um eine vereinfachte Version). Alles funktioniert wie erwartet und ich bekomme eine compiled.css
Datei mit allen Front-Materie-CSS. Allerdings musste ich den Präfix nicht nur in meiner regulären CSS-Datei, sondern auch in dieser neuen kompilierten.css verwenden. Also habe ich eine prefix
Aufgabe:
gulp.task('prefix', ['compileCSS', 'copy'], function() {
gulp.src('./build/assets/css/*.css')
.pipe(autoprefixer({ browsers: ['last 3 versions'] }))
.pipe(gulp.dest('build'))
;
});
Nun ist das Problem, dass die on('end'
Funktion läuft am Ende aller Aufgaben, nicht nur die compileCSS
Aufgabe.
Meine Frage ist, gibt es eine Möglichkeit, eine "am Ende" Art Aufgabe für jede Aufgabe zu injizieren? Oder gibt es eine Möglichkeit, Streams irgendwie zu verwenden (da die letzte Task kein tatsächlicher Stream ist und keinen Vorteil daraus zieht, sehe ich nicht wie).
Ist es nicht nur, dass sie gleichzeitig ausgeführt werden, weil Sie keinen Rückruf bereitgestellt haben? https://github.com/gulpjs/gulp/blob/master/docs/recipes/running-tasks-in-series.md – RichieAHB