gulp在运行之前如何解决依赖关系?

gulp在运行之前如何解决依赖关系?,gulp,Gulp,假设有四个任务‘a’、‘b’、‘c’、‘d’(b依赖于c和d;c和d都依赖于a),因此任务按以下顺序运行: a->(c,d)->b 下面是相应工作的gulpfile.js: gulp.task('a'); gulp.task('c', ['a']); gulp.task('d', ['a']); gulp.task('b', ['c', 'd']); 尽管任务“c”和“d”都依赖于任务“a”,但gulp足够聪明,可以让任务“a”只运行一次。我想知道既然任务以最大并发度运行,那么gulp在运行之

假设有四个任务‘a’、‘b’、‘c’、‘d’(b依赖于c和d;c和d都依赖于a),因此任务按以下顺序运行:

a->(c,d)->b

下面是相应工作的gulpfile.js:

gulp.task('a');
gulp.task('c', ['a']);
gulp.task('d', ['a']);
gulp.task('b', ['c', 'd']);
尽管任务“c”和“d”都依赖于任务“a”,但gulp足够聪明,可以让任务“a”只运行一次。我想知道既然任务以最大并发度运行,那么gulp在运行之前如何解决依赖关系?

如果任务具有依赖关系,gulp任务似乎并不总是以最大并发度运行。说:

注意:默认情况下,任务以最大并发度运行,例如it 一次启动所有任务,不等待任何结果。如果你想 创建一个系列,其中任务按特定顺序运行,您需要执行以下操作 两件事:

  • 给它一个提示,告诉它任务何时完成
  • 并给它一个提示,一项任务取决于另一项任务的完成
gulp用于运行任务,orchestrator用于按顺序安排任务

例如,您的示例中的任务将按顺序排列为
a->c->d->b
a->d->c->b
,并由orchestrator按顺序执行

如果我理解正确的话,c和d在理论上可以并行执行,但在当前的gulp实现中不能并行执行

编辑


orchestrator似乎并行运行c和d。它按顺序循环执行任务,并运行未完成或正在运行且依赖关系已全部完成的任务。当每个任务完成时,它会重复该操作,直到所有任务都完成。请参阅
Orchestrator.prototype.\u runStep
了解更多详细信息。

记录它的更好方法可能是“在考虑所有指定的依赖项后,以最大可能的并发性执行gulp(Orchestrator)。”

那么在您的场景中,c和d实际上是“并行”运行的吗?好的,是和否。因为JavaScript是单线程的,从技术上讲,处理器可以执行c或d,但不能同时执行两者。Gulp(orchestrator)将启动a,等待它完成,然后启动c和d,并等待两者完成,然后启动b

如果任务c和d完全是异步的,您将看到它们同时执行。(请注意,gulp定时输出相互交织。)如果任务完全同步,从技术上讲,它们不会“并行”运行。。。只是因为JavaScript是单线程的


这是可能的最大并发性,考虑到您指定的所有限制。

我发现代码与您的方向一致。非常感谢。:)我发现一个吞咽问题很好地解决了相关问题,对于任何有类似问题的人,您可以参考中的robrich的答案。