【问题标题】:Passing a stream between two gulp tasks?在两个 gulp 任务之间传递一个流?
【发布时间】:2014-03-21 17:39:17
【问题描述】:

我无法找到任何关于如何在 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 个任务返回/创建的流“传递”到其他一些任务中,这样我们就不会复制 globbing,同时仍然制作“lint”和“glob”不同的任务。这在 Gulp 中是否可取?

谢谢!

【问题讨论】:

    标签: gulp


    【解决方案1】:

    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 推出新的编排器)正在处理任务依赖关系及其执行。 Remember, those tasks can be async,所以你不想共享一个可以被多个消费者使用的流!

    【讨论】:

    • 有点让我希望流可以有一个类似“承诺”的方面,其中特定时间点的流状态可以在消费者之间传递,新的流状态可以是任意的被锁住了。
    • @user2217522,根据当前的gulp 文档,这最终是可能的(尽管它在其示例中引用了Q 库,而不是本机Promises),但它没有提及将承诺作为返回值传递给下一个任务。但是,您始终可以在顶层声明它并在每个任务中解决/拒绝它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多