Tugas Gulp.js, kembali pada src?

132

Saya baru menelan dan telah melihat melalui contoh set-up. Beberapa orang memiliki struktur berikut:

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

Orang lain memiliki ini:

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

Saya bertanya-tanya apa bedanya pengembalian pada src ??

boldfacedesignuk
sumber

Jawaban:

158

Anda returnmenunjukkan bahwa tugasnya adalah async. gulp.src()mengembalikan aliran, jadi async.

Tanpanya, sistem tugas tidak akan tahu kapan selesai. Baca dokumen .

Sindre Sorhus
sumber
Luar biasa! terima kasih atas balasan Sindre. Memiliki tegukan berlari seperti pesona sekarang. Suka.
boldfacedesignuk
Mengagumkan apa yang saya cari :)
Sebastien Lorber
14
Apakah itu berarti Anda harus kembali saat menggunakan gulp.src()? Apa yang terjadi jika Anda tidak kembali gulp.src()?
jbandi
11
I second @ jbandi's - pertanyaan yang jelas untuk diajukan di sini adalah "adakah alasan untuk tidak kembali gulp.src(..., atau haruskah kita selalu melakukannya?" Jawaban ini akan lebih bermanfaat jika ditujukan pada titik itu, IMO; saat ini tidak membahas mengapa ada banyak contoh tugas yang memanggil gulp.src(...tetapi tidak mengembalikannya.
Mark Amery
2
@ jbandi: Jika Anda tidak returnmaka sistem dependensi mungkin memulai tugas sebelum dependensinya selesai. Saya punya gulpfile dengan banyak tugas (sebagian besar dihasilkan kode). Karena saya tidak mengembalikan aliran, tugas bergantung sudah membaca file sementara ketergantungannya masih membangun. Membuat saya dalam segala macam masalah ...
gligoran
37

Jika Anda memiliki tugas dependen, Anda perlu mengembalikan aliran untuk tugas-tugas untuk menunggu tugas dependen mereka untuk menyelesaikan sebelum menjalankan sendiri.

misalnya

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

dalam contoh itu Anda akan mengharapkan task1 untuk menyelesaikan (misalnya mengkompilasi naskah kopi atau apa pun) sebelum task2 berjalan ... tetapi kecuali kita menambahkan kembali - seperti contoh di bawah ini - maka mereka akan berjalan secara sinkron bukan asinkron; dan skrip kopi yang dikompilasi tidak akan dikecilkan karena task2 tidak akan menunggu tugas 1 selesai dan karenanya tidak akan mengambil output dari task1 yang dikompilasi . Jadi kita harus selalu kembali dalam keadaan seperti ini.

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

Sunting: Resep di sini menjelaskan lebih lanjut. https://github.com/gulpjs/gulp/blob/master/docs/recipes/running-tasks-in-series.md

byronyasgur
sumber
26

Saya menemukan ini bermanfaat, jika Anda memiliki beberapa aliran per tugas. Anda perlu menggabungkan / menggabungkan beberapa aliran dan mengembalikannya.

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

Alternatifnya, menggunakan struktur definisi tugas Gulps, adalah:

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']);
jpblancoder
sumber