按顺序运行Gulp任务似乎不起作用

时间:2015-10-20 15:31:24

标签: gulp

我对Gulp很陌生,我很喜欢它,但也有点根本不理解它,所以我可能会完全以错误的方式解决这个问题。

我有这样的文件结构:

main
|-build
  |-big_file1.txt
  |-big_file2.txt
  |-small_file3.txt
  |-med_file4.txt

我想将build的内容复制到新目录然后删除一些文件,所以我设置了两个这样的任务:

var gulp = require("gulp");
var foreach = require("gulp-foreach");
var del =require("del");

gulp.task("taskA", function(cb){
    var err = undefined;
    gulp.src("./build/*file*")
        .pipe(foreach(function(stream, file){
            stream.pipe(gulp.dest("./test"));
            return stream;
        }));

    cb(err);
});

gulp.task("taskB", ["taskA"], function(cb){
    var err = undefined;
    del(["./test/*big*"]);
    cb(err);
});

当我手动运行gulp taskA时,重复文件会按预期显示在./test中,如果我然后运行gulp taskB,则会删除前缀为big的文件。所有的时髦和正如预期的那样。

然后我尝试按顺序运行任务:

gulp.task("both", ["taskA", "taskB"]);

gulp.task("taskA", function(cb){
    var err = undefined;
    gulp.src("./build/*file*")
        .pipe(foreach(function(stream, file){
            stream.pipe(gulp.dest("./test"));
            return stream;
        }));

    cb(err);
});

gulp.task("taskB", ["taskA"], function(cb){
    var err = undefined;
    del(["./test/*big*"]);
    cb(err);
});

它并没有以同样的方式运作。日志显示taskA已启动,然后结束taskB那么both并且重复文件在./test中创建,但删除从未发生。任何人都可以解释这里发生的事情,并建议一种解决方法吗?

提前谢谢你:)

1 个答案:

答案 0 :(得分:1)

使任务顺序

嗯,根据你提供的描述,你应该只在你的任务完成时返回你的溪流告诉gulp:

gulp.task("taskA", function (){
    return gulp.src("./build/*file*")
        .pipe(gulp.dest("./test"));
});

gulp.task("taskB", ["taskA"], function (){
    return del(["./test/*big*"]);
});

可能使用回调,但您需要在正确的位置调用它们。在您的问题中的代码中,您在之前将其称为gulp.src().pipe...执行的操作有机会运行。它们是异步的。

简化Gulpfile

我已经解释了如何修复您的代码,以便排序可以正常工作,但您可以将这两个任务合并为一个;

gulp.task("single", function (){
    return gulp.src(["./build/*file*", "!./build/*big*"])
        .pipe(gulp.dest("./test"));
});

根据您已显示的输入,这将为您提供与运行任务both相同的结果。由于第二个模式开头的感叹号,它会复制与./build/*file*匹配但 ./build/*big*的文件。这样做的好处是不会进行不必要的复制,只是为了删除无关的文件。