2014-02-11 13 views
117

Ich bin neu zu schlucken und habe durch Beispiel-Setups gesucht. Einige Leute haben die folgende Struktur:Gulp.js Aufgabe, Rückkehr auf src?

gulp.task("XXXX", function() { 
    gulp.src(".... 

Andere Leute haben dies:

gulp.task("XXXX", function() { 
    return gulp.src(".... 

Ich frage mich, was für einen Unterschied die Rückkehr auf dem src macht ??

Antwort

145

Sie return, um anzuzeigen, dass die Aufgabe async ist. gulp.src() gibt einen Stream zurück, also ist es asynchron.

Ohne sie das Task-System würde nicht wissen, wenn es fertig. Lesen Sie die docs.

+0

Ausgezeichnet! Danke für die Antwort Sindre. Schlucke jetzt wie ein Zauberer. Liebe es. –

+0

Genial genau das, was ich gesucht habe :) –

+12

Bedeutet das, dass Sie * müssen * zurückkehren, wenn Sie 'gulp.src()' verwenden? Was passiert, wenn Sie 'gulp.src()' nicht zurückgeben? – jbandi

21

fand ich dies hilfreich, wenn Sie mehrere Streams pro Aufgabe. Sie müssen die mehreren Streams kombinieren/zusammenführen und sie zurückgeben.

var gulp = require('gulp'); 
var merge = require('gulp-merge'); 

gulp.task('test', function() { 
    var bootstrap = gulp.src('bootstrap/js/*.js') 
     .pipe(gulp.dest('public/bootstrap')); 

    var jquery = gulp.src('jquery.cookie/jquery.cookie.js') 
     .pipe(gulp.dest('public/jquery')); 

    return merge(bootstrap, jquery); 
}); 

Die Alternative, Aufgabendefinition Struktur mit Gulps wäre:

var gulp = require('gulp'); 

gulp.task('bootstrap', function() { 
    return gulp.src('bootstrap/js/*.js') 
     .pipe(gulp.dest('public/bootstrap')); 
}); 

gulp.task('jquery', function() { 
    return gulp.src('jquery.cookie/jquery.cookie.js') 
     .pipe(gulp.dest('public/jquery')); 
}); 

gulp.task('test', ['bootstrap', 'jquery']); 
33

Wenn Sie abhängige Aufgaben haben Sie für die Aufgaben nach Rückkehr der Strom müssen auf ihren abhängigen Aufgaben warten zu vervollständigen bevor du dich selbst rennst.

zB

// without return 
gulp.task('task1', function() { 
    gulp.src('src/coffee/*.coffee') 
     /* eg compile coffeescript here */ 
    .pipe(gulp.dest('src')); 
}); 

gulp.task('task2', ['task1'], function() { 
    gulp.src('src/*.js') 
     /* eg minfify js here */ 
    .pipe(gulp.dest('dest')); 
}); 

in diesem Beispiel Sie task1 (zB die Erstellung der Coffeescript oder was auch immer) vor task2 Läufe abgeschlossen erwarten würde ... aber es sei denn, wir fügen Rückkehr - wie im Beispiel unten - dann werden sie synchron nicht asynchron ausgeführt; und die kompilierte Coffee nicht minimierte werden, da task2 nicht für Aufgabe gewartet haben 1 abzuschließen und so werden auf der kompilierte Ausgabe von task1 abholen. Unter diesen Umständen sollten wir immer zurückkehren.

// with return 
gulp.task('task1', function() { 
    return gulp.src('**/*.coffee') 
     /* your operations here */ 
    .pipe(gulp.dest('dest')); 
}); 

gulp.task('task2', ['task1'], function() { 
    return gulp.src('**/*.js') 
     /* your operations here */ 
    .pipe(gulp.dest('dest')); 
}); 

Edit: Das Rezept hier erklärt sie weiter. https://github.com/gulpjs/gulp/blob/master/docs/recipes/running-tasks-in-series.md

Verwandte Themen