run-sequence不按顺序运行gulp任务

时间:2016-12-17 10:11:15

标签: javascript gulp run-sequence

我的Gulp文件中有3个必须按此顺序运行的任务:

  1. clean(删除/dist文件夹中的所有内容)
  2. copy(将多个文件复制到/dist文件夹中)
  3. replace(替换/dist文件夹中某些文件中的某些字符串)
  4. 我已经阅读了所有其他帖子,我已尝试过" run-sequence"但它没有作为"替换"任务最后没有运行。我对使用"回调"感到困惑。单独运行任务工作正常。

    var gulp = require('gulp');
    var runSequence = require('run-sequence');
    
    gulp.task('runEverything', function(callback) {
        runSequence('clean',
                    'copy',
                    'replace',
                    callback);
    });
    
    gulp.task('clean', function () {
        return del(
            'dist/**/*'
        );
    });
    
    gulp.task('copy', function() {
        gulp.src('node_modules/bootstrap/dist/**/*')
            .pipe(gulp.dest('dist/vendor'))
        //...
        return gulp.src(['index.html', '404.html', '.htaccess'])
            .pipe(gulp.dest('dist/'));
    });
    
    gulp.task('replace', function(){
        gulp.src(['dist/index.php', 'dist/info.php'])
            .pipe(replace('fakedomain.com', 'realdomain.com'))
            .pipe(gulp.dest('dist'));
    
        return gulp.src(['dist/config.php'])
            .pipe(replace('foo', 'bar'))
            .pipe(gulp.dest('dist'));
    });
    

    使用这3个任务的完整示例将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:12)

run-sequence documentation有关于异步操作任务的以下内容:

  

确保他们返回流或承诺,或处理回调

您的copyreplace任务都有多个流。您必须返回所有流,而不仅仅是最后一个。如果你不回来,Gulp对其他溪流一无所知,因此不会等待他们完成。

由于您只能返回单个流,因此必须合并流[在此处插入Ghostbusters参考]。这将为您提供一个可以从任务中返回的合并流。

以下是merge-stream package

的使用方法
var merge = require('merge-stream');

gulp.task('copy', function() {
    var stream1 = gulp.src('node_modules/bootstrap/dist/**/*')
        .pipe(gulp.dest('dist/vendor'))
    //...
    var stream2 = gulp.src(['index.html', '404.html', '.htaccess'])
        .pipe(gulp.dest('dist/'));

    return merge(stream1, stream2);
});

gulp.task('replace', function(){
    var stream1 = gulp.src(['dist/index.php', 'dist/info.php'])
        .pipe(replace('fakedomain.com', 'realdomain.com'))
        .pipe(gulp.dest('dist'));

    var stream2 = gulp.src(['dist/config.php'])
        .pipe(replace('foo', 'bar'))
        .pipe(gulp.dest('dist'));

    return merge(stream1, stream2);
});