使用不同的参数多次运行管道部分以进行连接步骤

时间:2014-10-21 12:34:46

标签: gulp

我是files object format

的粉丝
files: {
    'dest/a.js': ['src/aa.js', 'src/aaa.js'],              // key: value
    'dest/a1.js': ['src/aa1.js', 'src/aaa1.js'],
}

我有一个gulp任务,可以连接像

这样的源文件
gulp.task('cat', function() {
     gulp.src( <value-goes-here> )
     .
     <many pipeline steps>
     .
     .pipe(concat(<key-goes-here>))
     .pipe(gulp.dest('target/')
     .
     <more pipeline steps to be run on 'dest/a.js' and 'dest/a1.js'>
     .
});

是否有一种流媒体方式扩展此任务,以便为files中的每个键值获得1个捆绑文件

我不想为每个键值对创建一个任务,因为我希望在最后.pipe(gulp.dest('target/');之后继续管理更多步骤

如果我以错误的方式处理此问题,是否有更好的方法?

提前谢谢!


Rob Rich的回答有效,Heres工作版本:

var Q = require('q');
var gulp = require('gulp');
var concat = require('gulp-concat');

var files = {
    'a.js': ['src/aa.js', 'src/aaa.js'],
    'a1.js': ['src/aa1.js', 'src/aaa1.js'],
};

gulp.task('cat', function() {
    var promises = Object.keys(files).map(function (key) {
        var deferred = Q.defer();
        var val = files[key];
        console.log(val);
        gulp.src(val)
            .pipe(concat(key))
            .pipe(gulp.dest('dest/'))
            .on('end', function () {
                deferred.resolve();
            });

        return deferred.promise;
    });
    return Q.all(promises);
});

1 个答案:

答案 0 :(得分:2)

试试这个:

var Q = require('q');

gulp.task('cat', function() {
    var promises = Object.keys(files).map(function (key) {
        var deferred = Q.defer();
        var val = files[key];

        gulp.src(val)
            .
            <many pipeline steps>
            .
            .pipe(concat(key))
            .pipe(gulp.dest('target/')
            .
            <more pipeline steps to be run on 'dest/a.js' and 'dest/a1.js'>
            .
            .on('end', function () {
                deferred.resolve();
            });

        return deferred.promise;
    });
    return Q.all(promises);
});

使用combined-streamstream-combiner软件包,您还可以使用流而不是承诺来完成类似的方案。