使用 gulp 对任务进行排序

Posted

技术标签:

【中文标题】使用 gulp 对任务进行排序【英文标题】:Sequencing tasks with gulp 【发布时间】:2015-03-24 12:12:35 【问题描述】:

我有点不知所措。根据文档,为了获得顺序执行,我应该从我的任务中返回流,所以我尝试为我的 gulpfile 执行以下操作。但据我所知,有一个竞争条件。一半时间我得到 ENOENT,lstat 错误,另一半成功了,但是我的 deployDir 有奇怪的文件夹名称和丢失的文件。我错过了什么吗?这有什么诀窍吗?

var gulp = require('gulp'),
    filter = require('gulp-filter'),
    mainBowerFiles = require('main-bower-files'),
    del = require('del'),
    inject = require("gulp-inject"),
    uglify = require('gulp-uglifyjs');

var config = 
    bowerDir: 'src/main/html/bower_components',
    cssDir: 'src/main/html/css/lib',
    fontsDir: 'src/main/html/fonts/lib',
    imgDir: 'src/main/html/img/lib',
    jsDir: 'src/main/html/js/lib',
    deployDir: 'src/main/resources/html'
;

gulp.task('default', ['clean', 'bowerdeps', 'dev']);

gulp.task('clean', function() 
    return del([
        config.cssDir,
        config.fontsDir,
        config.jsDir,
        config.deployDir
    ]);
);

gulp.task('dev', function() 
    return gulp
        .src(['src/main/html/**', '!src/main/html/bower_components,bower_components/**'])
        .pipe(gulp.dest(config.deployDir));
);

gulp.task('bowerdeps', function() 
    var mainFiles = mainBowerFiles();

    if(!mainFiles.length) return; // No files found

    var jsFilter = filterByRegex('.js$');
    var cssFilter = filterByRegex('.css$');
    var fontFilter = filterByRegex('.eot$|.svg$|.ttf$|.woff$');

    return gulp
        .src(mainFiles)
        .pipe(jsFilter)
        .pipe(gulp.dest(config.jsDir))
        .pipe(jsFilter.restore())
        .pipe(cssFilter)
        .pipe(gulp.dest(config.cssDir))
        .pipe(cssFilter.restore())
        .pipe(fontFilter)
        .pipe(gulp.dest(config.fontsDir));
);

// Utility Functions
var filterByRegex = function(regex)
    return filter(function(file)
        return file.path.match(new RegExp(regex));
    );
;

【问题讨论】:

How to run Gulp tasks sequentially one after the other的可能重复 【参考方案1】:

依赖项始终并行运行:['clean', 'bowerdeps', 'dev']

https://github.com/gulpjs/gulp/blob/master/docs/recipes/running-tasks-in-series.md

您可以使用run-sequence 对任务进行排序。

其他事情:del 不返回流。改用回调:

gulp.task('clean', function(cb) 
    del([
        config.cssDir,
        config.fontsDir,
        config.jsDir,
        config.deployDir
    ], cb);
);

【讨论】:

以上是关于使用 gulp 对任务进行排序的主要内容,如果未能解决你的问题,请参考以下文章

使用 SBT 如何在运行测试之前对插件中的任务进行排序

使用插入排序对链表进行并行排序

9.2.1 hadoop mapreduce任务输出的默认排序

在Java中递归地对数字的数字进行排序

YouTrack 4.x - 您如何在敏捷板的泳道中按优先级对所有任务进行排序? [关闭]

XSLT 使用来自外部文档的信息对表格进行排序