2016-06-16 12 views
0

Ich benutze Schluck 4.0. Und ich habe, diese 'watch' Aufgabe:Gulp.js. Gleiche Aufgabe auf der Uhr, mit verschiedenen parallelen Aufgaben

gulp.task("watch", function() { 
    gulp.watch("scss/*.scss", gulp.series("sass")).on("unlink", function(filepath) { 
     remember.forget("sass", path.resolve(filepath)); 
     delete cached.caches.sass[path.resolve(filepath)]; 
    }); 
    gulp.watch("templates/**/*.jade", gulp.series("jade")).on("unlink", function(filepath) { 
     remember.forget("jade", path.resolve(filepath)); 
     delete cached.caches.jade[path.resolve(filepath)]; 
    }); 
}); 

Also, ich habe denselben zwei Zeilen:

remember.forget("jade", path.resolve(filepath)); 
delete cached.caches.jade[path.resolve(filepath)]; 

Wenn es sich um eine Rohrleitungen war, wäre es einfach, neue Aufgabe zu erstellen und sie dann laufen. Aber hier habe ich ein Argument (Parameter) - filepath.

So ist die Frage: Wie kann ich es mit einer Aufgabe ersetzen? Ohne Wiederholung dieser beiden Zeilen.

Antwort

1

So ist die Frage: Wie kann ich es mit einer Aufgabe ersetzen?

Sie können nicht. Aufgaben können keine Argumente annehmen. Ihre einzige Option ist eine Funktion zu erstellen:

function runTask(taskName) { 
    return function(evt, filepath) { 
    if (evt === "unlink") { 
     remember.forget(taskName, path.resolve(filepath)); 
     delete cached.caches[taskName][path.resolve(filepath)]; 
    } 
    gulp.series(taskName)(); 
    }; 
} 

gulp.task("watch", function() { 
    gulp.watch("scss/*.scss").on("all", runTask("sass")); 
    gulp.watch("templates/**/*.jade").on("all", runTask("jade")); 
}); 

Beachten Sie, dass der obige Code setzt voraus, dass Sie die sass und jade Caches vor der Ausführung der sass und jade Aufgaben löschen möchten. Wenn es umgekehrt ist, musst du es entsprechend anpassen.

+0

Danke! Genau das, was ich brauche, aber was ist damit: https://jsfiddle.net/AleshaOleg/hmdkbm7k Warum, das ist nicht meine Aufgaben ausgeführt? – AleshaOleg

+0

Es führt Ihre Aufgaben. Aber nur wenn Sie eine Datei löschen, weil Sie Ihre Funktion nur für das Ereignis 'unlink' registriert haben. –

+0

Es ist nicht, weil, wenn ich das Ereignis 'all' habe, der Dateiname definiert ist. Aber wenn ich das Ereignis auf "unlink" verlasse, ist "filename" nicht definiert. Weißt du wo ein Problem ist? – AleshaOleg

Verwandte Themen