Gulp.js task, return on src?

Я новичок в gulp и просматриваю примерные настройки. Некоторые люди имеют следующую структуру:

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

Другие люди имеют это:

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

Мне интересно, какая разница в return на src?

Ответ 1

Вы return, чтобы указать, что задача является асинхронной. gulp.src() возвращает поток, поэтому он асинхронно.

Без него система задач не узнает, когда она закончится. Прочтите docs.

Ответ 2

Если у вас есть зависимые задачи, вам нужно вернуть поток для выполнения задач, ожидающих завершения их зависимых задач, прежде чем запускать их.

например

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

в этом примере вы ожидаете, что task1 завершит (например, компилирует coffeescript или что-то еще) до запуска task2... но если мы не добавим return - как пример ниже - тогда они будут выполняться синхронно не асинхронно; и скомпилированный coffeescript не будет уменьшен, потому что task2 не дождался завершения задачи 1 и поэтому не будет собирать скомпилированный результат задачи1. Поэтому мы всегда должны возвращаться в этих обстоятельствах.

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

Изменить: рецепт здесь объясняет это далее. https://github.com/gulpjs/gulp/blob/master/docs/recipes/running-tasks-in-series.md

Ответ 3

Я нашел это полезным, если у вас несколько потоков на одну задачу. Вам нужно объединить/объединить несколько потоков и вернуть их.

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, будет следующее:

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