Gulp:将依赖任务的返回流作为参数传递

5

我正在尝试创建两个gulp任务,并且我希望第二个任务可以获取第一个任务的输出流并继续对其应用插件。

我能否将第一个任务的返回值传递给第二个任务呢?

以下方式无法实现:

// first task to be run
gulp.task('concat', function() {
  // returning a value to signal this is sync
  return
    gulp.src(['./src/js/*.js'])
      .pipe(concat('app.js'))
      .pipe(gulp.dest('./src'));
};

// second task to be run
// adding dependency
gulp.task('minify', ['concat'], function(stream) {
  // trying to get first task's return stream
  // and continue applying more plugins on it
  stream
    .pipe(uglify())
    .pipe(rename({suffix: '.min'}))
    .pipe(gulp.dest('./dest'));
};

gulp.task('default', ['minify']);

有没有办法做到这一点?


你第二个任务中的 streamgulp 的通用回调函数,当当前任务完成时会调用它。这是一种允许依赖任务异步执行的方式,因此你的第一个任务可以在不同步的情况下告诉第二个任务何时完成。 - trysis
2个回答

1

你不能将流传递给其他任务。 但是,你可以使用 gulp-if 模块根据条件跳过一些流处理方法。

var shouldMinify = (0 <= process.argv.indexOf('--uglify'));

gulp.task('script', function() {
  return gulp.src(['./src/js/*.js'])
      .pipe(concat('app.js'))
      .pipe(gulpif(shouldMinify, uglify())
      .pipe(gulpif(shouldMinify, rename({suffix: '.min'}))
      .pipe(gulp.dest('./dest'));
});

执行像这样的任务来进行压缩。
gulp script --minify

1
我正在寻找相同的解决方案,但最终只是链接函数。 这非常灵活。 如果有人有更好的解决方案而不使用额外的包,请分享。
function concatenate() {
      return gulp
            .src(['./src/js/*.js'])
            .pipe(concat('app.js'));
}

function minify() {
      return this
            .pipe(uglify())
            .pipe(rename({suffix: '.min'}));
}

function output() {
      return this.pipe(gulp.dest('./src'));
}

gulp.task('concat', function() {
      return output.call(concatenate());
});

gulp.task('minify', function() {
      return output.call(minify.call(concatenate()));
});

gulp.task('default', ['minify']);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接