gpt4 book ai didi

node.js - 为什么有些 Gulp 默认流 "flow",而有些则没有?

转载 作者:搜寻专家 更新时间:2023-10-31 23:38:32 27 4
gpt4 key购买 nike

考虑这两个 gulp 任务:

gulp.task('src', function(done) {
gulp.src('docs/*')
.on('end', function() {
console.log('ending');
done();
});
});

gulp.task('dest', function(done) {
gulp.src('docs/*')
.pipe(gulp.dest('temp'))
.on('end', function() {
console.log('ending');
done();
});
});

运行 gulp dest 的行为符合预期,输出:

[12:33:15] Using gulpfile ~/Projects/gulp-exit/gulpfile.js
[12:33:15] Starting 'dest'...
ending
[12:33:15] Finished 'dest' after 13 ms

但是,运行 gulp src 只会输出:

[12:31:11] Using gulpfile gulpfile.js
[12:31:11] Starting 'src'...

永远不会调用'end' 回调。经过一些调试,我认为 dest 任务中的流是 flowing而源任务中的流不是。

通过调用 stream.resume()src 任务显式发送信号:

gulp.task('src', function(done) {
gulp.src('docs/*')
.on('end', function() {
console.log('ending');
done();
})
.resume();
});

给出预期的输出:

[12:46:52] Using gulpfile gulpfile.js
[12:46:52] Starting 'src'...
ending
[12:46:52] Finished 'src' after 11 ms

我在插件中看到了同样的行为组合:gulp.destgulp-mocha似乎在 gulp-logger 时返回流动的溪流和 gulp-gh-pages不要。

为什么行为不同?

最佳答案

之所以会出现这种情况,是因为有些流有数据需要读取,有些则没有。

gulp.src('docs/*') 返回一个可读流,其中包含 docs 中每个文件的数据。 end 事件只会在从流中读取所有数据后触发可读流。

通常你会把它传送到另一个自动执行的流,但因为你不是你需要使用:

gulp.task('src', function(done) {
gulp.src('docs/*')
.on('data', function() {})
.on('end', function() {
console.log('ending');
done();
});
});

或者,您可以使用 finish 事件,它(我认为)会一直等到所有数据都被推送到流中(即它已完成工作):

gulp.task('src', function(done) {
gulp.src('docs/*')
.on('finish', function() {
console.log('ending');
done();
});
});

你的第二个 gulp 任务使用 gulp.dest('temp') 返回一个没有数据的流,所以 end 在流处理完成后立即触发.

关于node.js - 为什么有些 Gulp 默认流 "flow",而有些则没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26206538/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com