Gulp.js任务,返回src吗?


132

我是新手,一直在研究示例设置。有些人具有以下结构:

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

其他人有这个:

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

我想知道src 的收益有何不同?

Answers:


158

return指示任务是异步的。gulp.src()返回一个流,所以它是异步的。

没有它,任务系统将不知道何时完成。阅读文档


优秀的!感谢您的答复信德。现在让大口大口的跑起来像一种魅力。爱它。
boldfacedesignuk

太棒了,我一直在寻找:)
Sebastien Lorber 2014年

14
这是否意味着使用时必须返回gulp.src()?如果你不回来gulp.src()怎么办 ?
jbandi 2015年

11
我第二个@jbandi是-这里要问的一个显而易见的问题是:“是否有任何不归还的理由gulp.src(...,还是我们应该始终这样做?” 国际海事组织如果解决了这一问题,将更加有用。目前,它并没有解决为什么有很多示例调用gulp.src(...但不返回它的任务。
Mark Amery 2015年

2
@jbandi:如果不这样做,return则依赖系统可能会在完成任务依赖之前启动任务。我有一个包含很多任务的gulpfile(主要是代码生成的)。因为我没有返回流,所以一个依存任务已经在读取文件,而依存关系仍在构建中。让我遇到了各种各样的麻烦……
gligoran 2015年

37

如果您有依赖任务,则需要返回流以使任务等待其依赖任务完成后再运行。

例如

// 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


26

如果每个任务有多个流,我发现这很有帮助。您需要合并/合并多个流并返回它们。

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']);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.