我正在尝试编写一个gulp插件,它将计算流中的文件数。 I used this as a starting point:
function count() {
var count = 0;
function countFiles(data) {
count++;
// added this as per official docs:
this.queue(data);
}
function endStream() {
console.log(count + " files processed");
// not doing this as per original post, as it "ends" the gulp chain:
//this.emit("end");
// so doing this instead as per official docs:
this.queue(null);
}
return through(countFiles, endStream);
}
module.exports = count;
这是一个示例任务:
gulp.task("mytask", function () {
gulp
.src("...files...")
.pipe(count()); // <--- here it is
.pipe(changed("./some/path"))
.pipe(uglify())
.pipe(rename({ extname: ".min.js" }))
.pipe(gulp.dest(./some/path))
.pipe(count()); // <--- here it is again
});
它完美无缺,但它没有按预期开始/结束:
[14:39:12] Using gulpfile c:\foo\bar\baz\gulpfile.js
[14:39:12] Starting 'mytask'...
[14:39:12] Finished 'mytask' after 9.74 ms
9 files processed
5 files processed
这意味着事物以异步方式运行并在任务完成后结束。文档说您必须使用回调或返回流。它似乎正在这样做。
如何使此功能运行?是因为我使用的是through
而不是through2
插件?
答案 0 :(得分:2)
将return
放在gulp
之前的任务中。您还没有任何方法可以知道您的信息流何时结束。