2014-11-27 10 views
17

bekommen Ich benutze Schluck-Klempner + Schluck-Notify und möchte Task-Name in Schluck-Notify als Titel setzen. folgend ist der Code, den ich schrieb, danke im Voraus.Wie Task-Name innerhalb Aufgabe im Schluck

gulp.task('SOMETASK', function() { 
    return gulp.src(sourcePaths) 
     .pipe(plumber({errorHandler: notify.onError({ 
      message: "<%= error.message %>", 
      title: "I WANT TO PUT TASK NAME HERE" 
     })})) 
     // omitted below 

}); 

Antwort

15
gulp.Gulp.prototype.__runTask = gulp.Gulp.prototype._runTask; 
gulp.Gulp.prototype._runTask = function(task) { 
    this.currentTask = task; 
    this.__runTask(task); 
} 

gulp.task("someTask", function(){ 
    console.log(this.currentTask.name); 
} 
+1

Wird dies geändert? Ich bekomme undefined auf currentTask – JimmyRare

+1

@JimmyRare - Es funktioniert, wenn Sie den Geltungsbereich der Variable 'currentTask' beobachten. Wenn Sie 'var currentTask;' vor diesem Block setzen und dann 'this.currentTask' in' currentTask' an beiden Stellen ändern, funktioniert es einwandfrei. Es wird erwartet, dass dieser Code innerhalb des Umfangs eines anderen Objekts liegt (daher die "This" -Referenz). – NightOwl888

-2

Definieren Sie den Namen der Aufgabe außerhalb des Rückrufs und referenzieren Sie ihn dort, wo er benötigt wird.

var taskName = 'SOMETASK'; 

gulp.task(taskName, function() { 
    return gulp.src(sourcePaths) 
     .pipe(plumber({errorHandler: notify.onError({ 
      message: "<%= error.message %>", 
      title: taskName 
     })})); 
}); 
+0

Das hilft nicht, wenn es verschachtelt ist ... sagen wir haben 'compile',' watch', 'dev' und' production 'Aufgaben. 'dev == [compile, watch]', 'production == [compile]'. Wenn der Name der Aufgabe "dev" lautet, dann führt die Kompilierung tatsächlich einige zusätzliche Quelldateien aus. – Funkodebat

9
gulp.task('SOMETASK',function() { 
    console.log('Task name:', this.seq.slice(-1)[0]) // Task name: SOMETASK 
}) 
+1

Diese Lösung funktioniert einwandfrei. – Kayhadrin

+1

Eigentlich funktioniert es nicht für alle Fälle, nämlich verschachtelte Fälle. –

+1

Dies ruft den ersten Tasknamen ab, der den Prozess 'default' gestartet hat. – JacopKane

1

Wenn Sie Affen-Patch Gulp wollen, wird folgendes mit Gulp Version arbeiten 3.9.0:

var _gulpStart = gulp.Gulp.prototype.start; 

var _runTask = gulp.Gulp.prototype._runTask; 

gulp.Gulp.prototype.start = function (taskName) { 
    this.currentStartTaskName = taskName; 

    _gulpStart.apply(this, arguments); 
}; 

gulp.Gulp.prototype._runTask = function (task) { 
    this.currentRunTaskName = task.name; 

    _runTask.apply(this, arguments); 
}; 

gulp.task('jscs', function() { 
    console.log('this.currentStartTaskName: ' + this.currentStartTaskName); 
    console.log('this.currentRunTaskName: ' + this.currentRunTaskName); 
}); 

gulp.task('jshint', function() { 
    console.log('this.currentStartTaskName: ' + this.currentStartTaskName); 
    console.log('this.currentRunTaskName: ' + this.currentRunTaskName); 
}); 

gulp.task('build', ['jshint', 'jscs']); 

gulp build ausführen, werden die folgenden Konsolenausgabe ergeben:

c: \ Projekt> Schluck bauen
[16.38.54] Mit gulpfile c: \ project \ gulpfile.js
[16.38.54] Ab 'jshint' ...
this.currentStartTaskName: bauen
this.currentRunTaskName: jshint
[16.38.54] Finished 'jshint' nach 244 & mgr; s
[16.38.54] Ab 'jscs' ...
this.currentStartTaskName: bauen
this.currentRunTaskName: jscs
[16: 38:54] Beendete "jscs" nach 152 μs
[16:38:54] Start 'bauen' ...
[16:38:54] Fertig 'bauen' nach 3.54 μs

+0

Dies fügte nützliche Informationen über den Unterschied zwischen der Startaufgabe und der Ausführungsaufgabe hinzu. – bmacnaughton

Verwandte Themen