gulp run-sequence:当prev任务尚未完成时显然正在运行的任务

时间:2014-07-16 08:22:26

标签: javascript asynchronous build task gulp

我们正在使用gulp和run-sequence来构建具有以下序列的应用程序:

gulp.task('build', function(cb) {
    runSequence(
        'lint',
        'clean',
        'compile-templates',
        'copy-dependencies',
        'compile-styles',
        'revall',
        'cdnize',
        'overlays',
        cb
    );
});

以下是单个任务的用法和用法(粘贴特定代码的时间很长,所以我试着简要介绍一下这些任务):

  • '编译模板':使用jade(~1.1.5)+ gulp-minify-html(^ 0.1.3),它获取我们所有的jade文件并将它们编译为html文件

  • ' copy-dependencies':使用gulp-spa(0.2.2)+ gulp-uglify(^ 0.2.1)+ gulp-concat(^ 2.1.7)+ gulp-ngmin (^ 0.1.2),它聚合我们所有的javascript文件和角度模板,构建和缩小我们的vendor.js和app.js文件以及small / index.html和large / index.html文件。

  • '编译风格':使用gulp-compass(~1.1.3)+ gulp-minify-css(~0.3.1),它将我们的scss文件编译到我们的desktop.css中和mobile.css文件

  • ' revall':使用gulp-rev-all(~0.3.0),负责加速所有以前生成的文件

  • ' cdnize':使用gulp-cdnizer(^ 0.2.6),它用我们的js和css文件替换路径,用small / index.html和large中的CDN url更新它们/index.html文件

  • '覆盖':使用gulp-replace(^ 0.3.0),它会找到以前生成和加速的css文件,并在我们的small / index.html和large / index中填写它们的实际名称.html文件也替换了其他一些占位符。

这是我们的'重叠'任务代码:

gulp.task('overlays', function() {
    var styles = fs.readdirSync('./dist/styles');
    var desktopCss = '';
    var mobileCss = '';

    for (var index in styles) {
        var style = styles[index];
        if (style.indexOf('desktop' + 'rev') > -1) {
            desktopCss = style.replace('.css', '');
        }

        if (style.indexOf('mobile' + 'rev') > -1) {
            mobileCss = style.replace('.css', '');
        }
    }

    return gulp.src('./dist/large/index.html')
        .pipe(plugins.replace('DIST_CSS', desktopCss))
        .pipe(plugins.if(!isDev, gulp.dest('./dist/large')))
        .pipe(gulp.src('./dist/small/index.html'))
        .pipe(plugins.replace('DIST_CSS', mobileCss))
        .pipe(plugins.if(!isDev, gulp.dest('./dist/small')));
});

要做很多事情,但没有什么比这更复杂了。 一切都通常运行得很好但是出于某种原因,有时候,我们遇到了一个我们无法理解的奇怪问题:

2个index.html文件最终没有所需的最终替换(在'覆盖'任务中发生的那些)

看起来运行序列块中的某些prev任务实际上仍然在运行下一个任务时运行(即' copy-dependencies'或' cdnize')

我们对所有任务进行了三重检查,所有这些任务都按照运行顺序的预期返回gulp管道。 从gulp输出来看,它看起来并不像是并行运行,但我们仍然有这些占位符而不是我们的值。

我想我们错过了一些关于gulp或我们正在使用的插件的内容,但我们无法真正理解为什么以及为什么。

0 个答案:

没有答案