javascript - Gulp.js-tehtävä, palauta src?


Olen uusi gulpin kanssa ja olen katsellut esimerkkiasetuksia. Joillakin ihmisillä on seuraava rakenne:

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

Muiden ihmiset ovat tätä mieltä:

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

Mietin, mitä eroa src:n palauttamisella on??

Vastaus #1

Palautat return merkiksi siitä, että tehtävä on asynkroninen. gulp.src() palauttaa streamin, joten se on asynkroninen.

Ilman sitä tehtäväjärjestelmä ei tietäisi, milloin se on valmis. Lue dokumentaatio.

Vastaus #2

Jos sinulla on riippuvaisia tehtäviä, sinun on palautettava virta, jotta tehtävät voivat odottaa riippuvien tehtäviensä valmistumista ennen kuin ne itse suoritetaan.

esim.

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

tuossa esimerkissä odottaisit, että task1 suorittuu loppuun (esim. coffeescriptin kääntäminen tai mitä tahansa) ennen kuin task2 käynnistyy... mutta ellei lisätä return - kuten alla olevassa esimerkissä - ne suoritetaan synkronisesti, eivät asynkronisesti; ja käännetty coffeescript ei tule pienennettyä, koska task2 ei ole odottanut task1:n suorittumista loppuun eikä siis ota huomioon task1:n käännettyä tulosta. Joten meidän tulisi aina käyttää returnia näissä tilanteissa.

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

Muokkaa: Tässä reseptissä selitetään asiaa tarkemmin. https://github.com/gulpjs/gulp/blob/master/docs/recipes/running-tasks-in-series.md

Vastaus #3

Pidin tätä hyödyllisenä, jos sinulla on useita virtoja per tehtävä. Sinun täytyy yhdistää/sulauttaa useat virrat ja palauttaa ne.

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

Vaihtoehto, käyttäen Gulpsin tehtävän määritelmän rakennetta, olisi:

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

Aiheeseen liittyviä artikkeleita