Answers:
您return
指示任务是异步的。gulp.src()
返回一个流,所以它是异步的。
没有它,任务系统将不知道何时完成。阅读文档。
gulp.src()
?如果你不回来gulp.src()
怎么办 ?
gulp.src(...
,还是我们应该始终这样做?” 国际海事组织如果解决了这一问题,将更加有用。目前,它并没有解决为什么有很多示例调用gulp.src(...
但不返回它的任务。
return
则依赖系统可能会在完成任务依赖之前启动任务。我有一个包含很多任务的gulpfile(主要是代码生成的)。因为我没有返回流,所以一个依存任务已经在读取文件,而依存关系仍在构建中。让我遇到了各种各样的麻烦……
如果您有依赖任务,则需要返回流以使任务等待其依赖任务完成后再运行。
例如
// 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运行......但除非我们增加收益 -如下面的例子-那么他们将同步运行不异步; 并且已编译的coffeescript将不会被最小化,因为task2不会等待任务1完成,因此不会从task1的已编译输出中获取数据。因此,在这种情况下,我们应始终返回。
// 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']);