Gulp.js 任务,在 src 上返回?

IT技术 javascript node.js gulp
2021-02-22 23:21:17

我是 gulp 的新手,一直在查看示例设置。有些人有以下结构:

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

其他人有这个:

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

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

3个回答

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

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

@jbandi:如果你不这样做,return那么依赖系统可能会在它的依赖完成之前启动一个任务。我有一个包含很多任务(主要是代码生成的)的 gulpfile。因为我没有返回流,一个依赖的任务已经在读取文件,而它的依赖还在构建。给我带来了各种各样的麻烦...
2021-04-16 23:21:17
优秀的!感谢辛德雷的回复。现在让 gulp 像魅力一样奔跑。爱它。
2021-05-03 23:21:17
我第二个@jbandi's - 这里要问的明显问题是“是否有任何理由不回来gulp.src(...,还是我们应该一直这样做?” 如果 IMO 解决了这一点,这个答案会更有用;目前它没有解决为什么有很多任务调用gulp.src(...但不返回它的例子
2021-05-09 23:21:17
太棒了,正是我要找的:)
2021-05-11 23:21:17
这是否意味着您在使用时必须返回gulp.src()如果你不回来会 gulp.src()怎样?
2021-05-15 23:21:17

如果您有相关任务,则需要返回任务流以等待其相关任务完成,然后再自行运行。

例如

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