连锁顺序任务

时间:2014-02-21 20:09:57

标签: node.js q gulp

我要处理3个任务,当完成这3个任务时,我想执行以下操作:

  1. 将三个文件连接在一起
  2. 丑化
  3. 写入磁盘
  4. Grunt我对这一切进行了很长时间的处理。以下是我使用Gulp

    尝试的内容
    gulp.task('libs', function () {
    return gulp.src('js/libs/*.js')
            .pipe(concat('01.libs.js', {newLine: ';'}))
            .pipe(gulp.dest('min'));
    });
    
    gulp.task('plugins', function () {
        return gulp.src('js/plugins/*.js')
                .pipe(concat('02.plugins.js', {newLine: ';'}))
                .pipe(gulp.dest('min'));
    });
    
    gulp.task('apps', function () {
        return gulp.src('js/apps/**/*.js')
                .pipe(concat('03.apps.js', {newLine: ';'}))
                .pipe(gulp.dest('min'));
    });
    
    gulp.task('scripts', ['libs', 'plugins', 'apps'], function () {
        return gulp .src('min/*.js')
                .pipe(concat('testFile.js', {newLine: ';\r\n'}))
                .pipe(rename({suffix: '.min.v' + pkg.version }))
                .pipe(gulp.dest('min'))
                .pipe(notify({ message: 'Scripts minified'}));
    });
    

    这有效,但我想只输出输出而不是写出3个中间文件,然后将它们连接起来。

    所以我接着尝试了:

    function libs () {
        return gulp.src('js/libs/*.js')
                .pipe(concat('01.libs.js', {newLine: ';'}));
    }
    
    function plugins () {
        return gulp.src('js/plugins/*.js')
                .pipe(concat('02.plugins.js', {newLine: ';'}));
    }
    
    function apps () {
        return gulp.src('js/apps/**/*.js')
                .pipe(concat('03.apps.js', {newLine: ';'}));
    }
    

    那么我的build就是:

    gulp.task('build', function () {
        return libs()
            .pipe(plugins())
            .pipe(apps())
            .pipe(concat('TestFile.js', {newLine: ';\r\n'}))
            .pipe(rename({suffix: '.min.v' + pkg.version }))
            .pipe(gulp.dest('min'));
    });
    

    这不起作用。

    所以我尝试了Q

    function allOfThem () {
        return Q.all(libs(), plugins(), apps());
    }
    
    gulp.task('build', function () {
        return allOfThem().then(function (one, two, three) {
            console.log(one, two, three);
        });
    });
    

    我想这可行,但then的回调中没有数据。

    我迷路了。实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

使用event-stream.merge

var es = require('event-stream');
gulp.task('build', function () {
    return es.merge(libs(), plugins(), apps())
        .pipe(concat('TestFile.js', {newLine: ';\r\n'}))
        .pipe(rename({suffix: '.min.v' + pkg.version }))
        .pipe(gulp.dest('min'));
});