【问题标题】:Can somebody explain the `clean` dependency in this gulpfile?有人可以解释这个 gulpfile 中的“干净”依赖吗?
【发布时间】:2017-01-23 01:48:46
【问题描述】:

尝试研究https://github.com/jhades/angularjs-gulp-example/blob/master/gulpfile.js,我注意到对于任务build,有一个依赖关系clean。但是,对于大多数其他定义,clean 也被指定为依赖项!因此,如果我运行build,它将运行clean,但是build-cssbuild-template-cache 也有clean 依赖项等等......它是否也会为每个运行clean依赖?所以基本上将运行一个命令gulp build 最终运行clean 不止一次...清除其他依赖项的输出...或者将运行clean 第一次显式满足其他依赖项的依赖项并阻止clean再次运行!?

任何指针将不胜感激。

请注意

我不是在问正确的清洁技术是什么!我特别询问我发布的链接......以及它如何处理clean 任务。

【问题讨论】:

  • @Claies 我简要阅读了链接...所以,谢谢。但是,我不是在问如何正确清理项目。我的问题专门与我发布的链接有关......以及它如何处理清洁。我只需要了解它的流程......因为它显然运行良好。
  • 基本上,构建是在管道中完成的,但clean 不是管道的一部分。因为clean作为每个任务的依赖被调用,它必须在任务运行之前完成,但是每个任务然后返回一个promise对象。最终效果是清理都在链条的前端运行。
  • 如果您碰巧使用watch 来触发那些依赖于clean 的任务之一,那么真正发生的唯一冲突会导致clean 在监视期间启动,并可能删除不需要的文件,这是我引用的链接中发生的问题。
  • @Claies 我明白了。谢谢。

标签: angularjs gulp del


【解决方案1】:

依赖关系

Dependencies 在 gulp 文件中只是说它必须至少在它之前运行一次。例如这段代码:

var gulp = require('gulp');

gulp.task('main', ['b', 'a'], function() {
  return gulp;
});

gulp.task('a', ['b'], function() {
  return gulp;
});

gulp.task('b', ['a'], function() {
  return gulp;
});

会这样运行:

  • main
  • a
  • b

不是:

  • main
  • a
  • b
  • a
  • b

无限重复。

依赖执行顺序

但是,它可以按照mainb、然后a 的顺序轻松运行。这是因为gulp 中的synchronous tasks。依赖必须在任务之前异步运行,但是它们一起运行或者同步运行,这个answer解释了同步和异步的区别。

为避免这种情况,您可以在Gulp 4 中使用此代码:

gulp.task('main', function() {
  gulp.series('a', 'b');
});

这将始终按mainab 的顺序运行 但在此之下,您需要使用run-sequence 包。这是一个例子:

var runSequence = require('run-sequence');
gulp.task('main', function() {
  runSequence('a', 'b');
})

【讨论】:

  • 我认为依赖顺序不一定是“按顺序”,因为它们显然是异步运行的。这不是真的吗?
猜你喜欢
  • 1970-01-01
  • 2010-10-13
  • 2013-01-09
  • 2012-04-19
  • 2021-01-06
  • 1970-01-01
  • 2011-06-13
  • 2011-01-16
  • 2011-03-17
相关资源
最近更新 更多