Gulp.js görevi, src'ye dönülsün mü?


132

Yutkunmada yeniyim ve örnek kurulumları araştırıyorum. Bazı insanlar aşağıdaki yapıya sahiptir:

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

Başkalarında bu var:

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

Src'nin getirisinin ne gibi bir fark yarattığını merak ediyorum ?

Yanıtlar:


158

Sen returngörev zaman uyumsuz olduğunu belirtmek için. gulp.src()bir akış döndürür, yani eşzamansızdır.

Bu olmadan görev sistemi ne zaman bittiğini bilemezdi. Belgeleri okuyun .


Mükemmel! cevap Sindre için teşekkürler. Şimdi bir cazibe gibi koşuşturan yudum var. Sevdim.
boldfacedesignuk

Tam olarak aradığım şey harika :)
Sebastien Lorber

14
Demek oluyor bu, mu olmalı kullanırken dönmek gulp.src()? Dönmezsen ne olur gulp.src()?
jbandi

11
Ben ikinci @ jbandi - burada sorulması gereken bariz soru "geri dönmemek için herhangi bir neden var mı gulp.src(..., yoksa bunu her zaman yapmalı mıyız?" Bu cevap şu noktayı ele alsaydı daha yararlı olurdu, IMO; halihazırda, onu çağıran gulp.src(...ancak geri getirmeyen görevlerin neden birçok örneği olduğunu ele almıyor.
Mark Amery

2
@jbandi: Yapmazsanız return, bağımlılık sistemi, bağımlılıkları tamamlanmadan önce bir görevi başlatabilir. Birçok görevi olan (çoğunlukla kodla oluşturulmuş) bir gulp dosyam var. Akışı geri vermediğim için, bağımlı bir görev, bağımlılığı kurulurken dosyayı zaten okuyordu. Beni her türlü belaya
soktu

37

Bağımlı görevleriniz varsa , görevlerin kendilerini çalıştırmadan önce bağımlı görevlerinin tamamlanmasını beklemeleri için akışı geri döndürmeniz gerekir .

Örneğin

// 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'));
});

Bu örnekte beklediğiniz Task1 önce (CoffeeScript ya da her türlü derleme mesela) tamamlanmasını 2'den seçilir çalışır ... ama eklemedikçe dönüşünü - aşağıdaki örnekte olduğu gibi - o zaman değil uyumsuz senkronize çalışacak; çünkü derlenmiş CoffeeScript minified olmayacak 2'den seçilir tamamlanması görev 1 beklemiş olmayacak ve böylece derlenmiş çıkışına cevap vermem Task1 . Bu yüzden her zaman bu koşullarda geri dönmeliyiz.

// 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'));
});

Düzenleme: Buradaki tarif daha ayrıntılı açıklıyor. https://github.com/gulpjs/gulp/blob/master/docs/recipes/running-tasks-in-series.md


26

Görev başına birden fazla akışınız varsa, bunu yararlı buldum. Birden çok akışı birleştirmeniz / birleştirmeniz ve geri döndürmeniz gerekir.

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);
});

Gulps görev tanımı yapısını kullanan alternatif şudur:

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']);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.