Ответ 1
Вы return
, чтобы указать, что задача является асинхронной. gulp.src()
возвращает поток, поэтому он асинхронно.
Без него система задач не узнает, когда она закончится. Прочтите docs.
Я новичок в gulp и просматриваю примерные настройки. Некоторые люди имеют следующую структуру:
gulp.task("XXXX", function() {
gulp.src("....
Другие люди имеют это:
gulp.task("XXXX", function() {
return gulp.src("....
Мне интересно, какая разница в return на src?
Вы return
, чтобы указать, что задача является асинхронной. gulp.src()
возвращает поток, поэтому он асинхронно.
Без него система задач не узнает, когда она закончится. Прочтите docs.
Если у вас есть зависимые задачи, вам нужно вернуть поток для выполнения задач, ожидающих завершения их зависимых задач, прежде чем запускать их.
например
// 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
Я нашел это полезным, если у вас несколько потоков на одну задачу. Вам нужно объединить/объединить несколько потоков и вернуть их.
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']);