gulp.src() 必须要返回吗?

4
我对 gulp.src() 感到困惑。
根据这个主题,我认为有必要返回gulp.src()
在 gulp 项目的示例中,通常都会返回gulp.src(),例如:gulp 入门示例
然而,许多插件的文档没有返回gulp.src(),例如:gulp-lessgulp-angular-templatecache
我该如何决定我的任务是否应该返回 gulp.src()?
2个回答

5
你应该总是返回gulp.src,这样gulp才能为你正确处理流。否则,如果其中有大量文件,则流可能不会完成。此外,你还可以获得一些其他(次要的)好处,例如运行程序将记录正确的任务完成时间。
通常我会看到人们赞扬gulp完成微秒级任务,但他们只是没有返回流。如果我们返回流,任务完成所需的时间也一样长。
不返回流的另一个问题是设置依赖任务。如果你想在另一个任务之前运行某个任务,你需要告诉gulp你已经处理完毕。你可以通过任务的回调函数或返回流来实现这一点。
唯一不返回流的情况是,如果单个任务中有多个流,则可以使用merge-stream
var merge = require('merge-stream');

gulp.task('task', function () {
    var someOperation = gulp.src('./').pipe(gulp.dest('out'));
    var someOtherOperation = gulp.src('./assets').pipe(gulp.dest('out/assets'));

    return merge(someOperation, someOtherOperation);
});

所以…虽然这不是强制要求,但这是最佳实践。我建议向插件作者的存储库提交拉取请求,更新他们的README文件以指示此事。

感谢您的解释!但是我现在有一个Gulp设置,当返回gulp.src()时不起作用...我不明白为什么?如果您能看一下这个问题,我将非常感激:http://stackoverflow.com/questions/27789367/gulp-does-not-work-when-returning-stream - jbandi
我有一个gulp任务,我只想使用gulp-shell。所以在这种情况下,我只需要将一个随机的输入文件作为src运行一次?我可以采用gulpfile.js本身来确保该文件存在吗?例如:return gulp.src('gulpfile.js', { read: false }).pipe(shell(['yarn list global']))。感谢您对此的建议... - Merc

1

如果你不返回流,gulp将报告构建管道所需的时间。如果你返回流,它将正确报告执行任务所需的时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接