2017-02-22 116 views
2

我已经在线阅读了'run-sequence'将确保所有指定的任务将同步运行。出于某种原因,我的情况并非如此。我错过了什么吗?在gulp中同步执行任务

“convertSassToCss”是如预期

如果我想运行的任务“cleanAllCss”和“convertSassToCss” seperatelly不工作,它会工作的任务。

这里的想法是首先从目录中删除所有的CSS文件,然后所有的青菜文件转换为CSS和放置到清洗DIR

/// <binding BeforeBuild='clean, min:css' Clean='clean' /> 
 
"use strict"; 
 

 
var gulp = require("gulp"), 
 
    rimraf = require("rimraf"), 
 
    concat = require("gulp-concat"), 
 
    cssmin = require("gulp-cssmin"), 
 
    uglify = require("gulp-uglify"), 
 
    sass = require('gulp-sass'), 
 
    rename = require('gulp-rename'), 
 
    del = require('del'), 
 
    runSequence = require('run-sequence'); 
 

 

 
var paths = { 
 
    webroot: "./wwwroot/" 
 
}; 
 

 
paths.cssPath = paths.webroot + "css/*.css"; 
 
paths.cssOutputPath = paths.webroot + "css"; 
 

 
//sass 
 
paths.sassPath = paths.webroot + "sass/**/*.scss"; 
 
paths.sassOutputPath = paths.webroot + "./css/file"; 
 

 
gulp.task("cleanAllCss", function (cb) { 
 
    console.log("2 -- Removing all CSS files"); 
 
    del([paths.cssOutputPath + "/*.css"], cb); 
 
    console.log("2 -- DONE - Removed all css files"); 
 
}); 
 

 
gulp.task("convertSassToCss", function (cb) { 
 
    console.log("3 -- Converting all SASS files into corresponding CSS"); 
 
    gulp.src(paths.sassPath) 
 
     .pipe(sass()) 
 
     .pipe(gulp.dest(paths.cssOutputPath)); 
 
    console.log("3 -- DONE - Converting all SASS files into corresponding CSS"); 
 
}); 
 

 
//not working, should run in sequence 
 
gulp.task("convertAllSassIntoCssMin", function (callback) { 
 
    console.log("1 -- Converting all SASS files into corresponding min CSS files") 
 
    runSequence('cleanAllCss', 'convertSassToCss', callback); 
 
    console.log("1 -- DONE - Converting all SASS files into corresponding min CSS files") 
 
});

+0

你是什么意思“不工作”?执行convertAllSassIntoCssMin任务时的结果是什么?控制台上打印什么? –

+0

它不会生成并将css文件输出到上面提到的目录中。控制台输出1,2,2,1,最后进程终止于代码0. 3永远不会到达,但它应该 – lucas

回答

0

问题出在cleanAllCss任务中。 del接受的第二个参数是options,而不是您尝试通过的回调。回调从未执行。尝试在删除完成后手动运行它。

gulp.task("cleanAllCss", function (cb) { 
    console.log("2 -- Removing all CSS files"); 
    del([paths.cssOutputPath + "/*.css"]).then(paths => { 
     console.log("2 -- DONE - Removed all css files"); 
     cb(); 
    }; 

}); 
1

我不能说对运行 - 序列因为我以前没有用过它。

但是,您可以通过使用咕嘟咕嘟的任务相关的功能,按顺序运行任务,其中一个任务将运行,直到它的依赖已经运行完毕。

你的新任务签名

  1. cleanAllCss保持不变:

    gulp.task("cleanAllCss", function (cb) { ... }

  2. convertSassToCss变化:

    gulp.task("convertSassToCss", ['cleanAllCss'], function (cb) { ... }

  3. convertAllSassIntoCssMin变化:

    gulp.task("convertAllSassIntoCssMin", ['convertSassToCss'], function (cb) { ... }

这确保了convertAllSassIntoCssMin不会运行,直到convertSassToCss完成这反过来将不运行,直到cleanAllCss完成。

参考吞掉deps

的DEP

类型:Array

任务的阵列将被执行,你的任务将 运行前完成。 ('mytask',['array','of','task','names'],function(){
// Do stuff});注意:您的任务是否在依赖关系 完成之前运行?确保您的依赖项任务正确使用异步运行提示 流接收回调或返回承诺或事件 流。

您也可以省略的功能,如果你只是想运行的 依赖任务捆绑:

gulp.task(“建设”,[“阵”,“中”,“任务”,“名“]);注意:任务 将并行运行(全部一次),因此不要认为任务 将按顺序开始/结束。