Gulp.js任务,返回src?

bol*_*nuk 129 javascript node.js gulp

我是新手,并且一直在查看示例设置.有些人有以下结构:

gulp.task("XXXX", function() {
    gulp.src("....
Run Code Online (Sandbox Code Playgroud)

其他人有这个:

gulp.task("XXXX", function() {
   return gulp.src("....
Run Code Online (Sandbox Code Playgroud)

我想知道src 的回报有什么不同?

Sin*_*hus 156

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

没有它,任务系统就不会知道它什么时候结束.阅读文档.

  • 这是否意味着你在使用`gulp.src()`时必须*返回?如果你不返回`gulp.src()`会发生什么? (14认同)
  • 我第二个@jbandi - 这里要问的一个显而易见的问题是"有没有理由不返回`gulp.src(...`,或者我们应该总是这样做吗?"如果它解决了这个问题,那么这个答案会更有用,IMO;目前它没有解决为什么有许多例子调用`gulp.src(...`但不返回它)的例子. (11认同)
  • @jbandi:如果你没有```return```那么依赖系统可能会在它的依赖完成之前启动一个任务.我有一个包含很多任务的gulpfile(主要是代码生成的).因为我没有返回流,所以依赖任务已经在读取文件时依赖于其依赖性仍在构建.让我遇到各种各样的麻烦...... (2认同)

byr*_*gur 36

如果您有依赖任务,则需要返回任务流,以便在运行自己之前等待其相关任务完成.

例如

// 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'));
});
Run Code Online (Sandbox Code Playgroud)

在这个例子,你会期望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'));
});
Run Code Online (Sandbox Code Playgroud)

编辑:这里的食谱进一步解释了它.https://github.com/gulpjs/gulp/blob/master/docs/recipes/running-tasks-in-series.md


jpb*_*der 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);
});
Run Code Online (Sandbox Code Playgroud)

使用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']);
Run Code Online (Sandbox Code Playgroud)