我对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
中创建,但删除从未发生。任何人都可以解释这里发生的事情,并建议一种解决方法吗?
提前谢谢你:)
答案 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...
执行的操作有机会运行。它们是异步的。
我已经解释了如何修复您的代码,以便排序可以正常工作,但您可以将这两个任务合并为一个;
gulp.task("single", function (){
return gulp.src(["./build/*file*", "!./build/*big*"])
.pipe(gulp.dest("./test"));
});
根据您已显示的输入,这将为您提供与运行任务both
相同的结果。由于第二个模式开头的感叹号,它会复制与./build/*file*
匹配但不 ./build/*big*
的文件。这样做的好处是不会进行不必要的复制,只是为了删除无关的文件。