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

use*_*522 13 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/**'
    ]);
});
Run Code Online (Sandbox Code Playgroud)

这是做这样事情的最好方法吗?是否有一种更好的方法可以将1个任务返回/创建的流"传递"到其他任务中,这样对于类似这样的东西,我们不会复制globbing,同时仍然可以创建'lint'和'glob'不同的任务.这在Gulp中甚至是可取的吗?

谢谢!

Bri*_*zel 11

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

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

Gulp的任务编排器(很快就会为Gulp 4推出一个新版本)处理任务依赖性及其执行.请记住,这些任务可以是异步的,因此您不希望共享可供多个消费者使用的流!

  • 排序使我希望可能存在类似于流的"承诺"方面,其中特定时间点的流的状态可以在消费者之间传递,并且新流状态可以被任意链接. (6认同)