【问题标题】:Gulp.js task, return on src?Gulp.js 任务,返回 src?
【发布时间】:2014-03-09 01:54:12
【问题描述】:

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

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

其他人有这个:

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

我想知道 src 上的 return 有什么不同?

【问题讨论】:

    标签: javascript node.js gulp


    【解决方案1】:

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

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

    【讨论】:

    • 太棒了!感谢辛德雷的回复。现在让 gulp 像魅力一样运行。喜欢它。
    • 真棒正是我想要的:)
    • 这是否意味着您在使用gulp.src()必须返回?如果您不返回 gulp.src() 会怎样?
    • 我支持@jbandi——这里要问的一个明显问题是“有没有理由不返回gulp.src(...,还是我们应该一直这样做?”如果它解决了这一点,IMO,这个答案会更有用;目前它没有解决为什么有很多任务调用gulp.src(...但不返回它的例子。
    • @jbandi:如果你不return,那么依赖系统可能会在它的依赖完成之前启动任务。我有一个包含很多任务的 gulpfile(主要是代码生成的)。因为我没有返回流,所以依赖任务已经在读取文件,而它的依赖关系仍在构建。给我带来了各种各样的麻烦......
    【解决方案2】:

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

    例如

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

    在该示例中,您希望 task1task2 运行之前完成(例如编译咖啡脚本或其他)...但除非我们添加 return——就像下面的例子——那么它们将同步运行而不是异步运行;并且编译后的咖啡脚本不会被缩小,因为 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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-04
        • 2015-07-27
        • 1970-01-01
        • 2014-06-28
        • 2013-03-27
        • 2016-06-08
        • 2018-12-15
        相关资源
        最近更新 更多