在两个gulp任务之间传递流?

15

我还没有找到在 gulp 中如何做到这一点的任何文档,甚至不确定是否应该像这样做:

var fileStream;

gulp.task('lint', ['glob'], function () {
    var jshint = require('gulp-jshint');

    fileStream.pipe(jshint())
       .pipe(jshint.reporter('default'));    

});

gulp.task('glob', function () {
    fileStream = gulp.src([
        './js/**/*.js',
        '!**/node_modules/**'
    ]);
});

这是做这种事情的最佳方式吗?有没有更好的方法将1个任务返回/创建的流传递给其他任务,以便我们不会在像这样的情况下重复全局查找,同时使“lint”和“glob”成为不同的任务。在Gulp中是否值得这样做?

谢谢!

1个回答

12

gulp构建中非常常见的模式

  • 将模式收集到一个单一的路径变量中
  • 每个任务都以一个"src"插件(通常是gulp.src)开头,并以一个"sink"插件(gulp.dest,或者像你的示例一样,一个报告生成器)结束。

因此,对于你的示例:

var paths = {
    scripts:[
        './js/**/*.js',
        '!**/node_modules/**'
    ],
    css: './css/**'
};

gulp.task('lint', function () {
    var jshint = require('gulp-jshint');

    var stream = gulp.src(paths.scripts)
        .pipe(jshint())
        .pipe(jshint.reporter('default'));

    return stream;
});

gulp.task('cssmin', function () {
    var stream = gulp.src(paths.css)
        .pipe(cssmin())
        .pipe(gulp.dest("..."));

    return stream;
});

为什么不能在任务之间共享流?

Gulp的任务编排器(以及很快将要推出的Gulp 4)处理任务依赖关系及其执行。请记住,这些任务可以是异步的(可参考此链接),因此您不希望共享一个可以供多个使用者使用的流!


7
有点让我希望流可以有一种“承诺”的特性,使得在特定时间点的流状态可以在消费者之间传递,并且新的流状态可以任意地链接。 - user2217522
根据当前的 gulp 文档,这是最终可能实现的(尽管在其示例中引用了 Q 库而不是原生的 Promise),但它没有提到将 Promise 作为返回值传递给下一个任务。然而,您始终可以在顶层声明它,并在每个任务中解决/拒绝它。 - trysis

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