在其他 Gulp 任务中调用 Gulp 任务?

3

我有一个 Gulp 构建任务,由其他类似于这个的构建任务组成:

gulp.task('build', ['build-html', 'build-css', 'build-js', 'build-images']);

我对这件事的厌恶在于,build 任务在依赖项完成之后才运行:

Starting 'build-html'...
Finished 'build-html' after 1 s
Starting 'build-css'...
Finished 'build-css' after 1 s
Starting 'build-js'...
Finished 'build-js' after 1 s
Starting 'build-images'...
Finished 'build-images' after 1 s
Starting 'build'...
Finished 'build' after 1 ms

很明显,build不应该在它的依赖未完成之前运行,所以它按照预期工作。但这会导致控制台显示build只花费了1毫秒的时间,而实际上它应该显示花费了4秒的时间,因为它的所有依赖都需要那么长时间。如果能像下面这样就好了:

Starting 'build'...
Starting 'build-html'...
Finished 'build-html' after 1 s
Starting 'build-css'...
Finished 'build-css' after 1 s
Starting 'build-js'...
Finished 'build-js' after 1 s
Starting 'build-images'...
Finished 'build-images' after 1 s
Finished 'build' after 4 s

注意,build是第一个“开始”的东西,然后所有依赖项运行,最后build完成。
所以我在想,是否可以不使用任务依赖性,而是从build任务内部逐个调用每个任务?如果可以,我应该使用什么命令?
这是一个不好的主意吗?有没有更好的解决方法?

你需要以这种方式打印所有构建任务的总时间吗? - lukewestby
我只是好奇总的构建时间有多长。上面的例子大大简化了实际情况,事实上,当它们涉及上传文件到远程服务器、源代码控制交互、优化数百张图片等时,一些构建任务会花费更长的时间... - Jake Wilson
实际上,您并没有首先运行“build”,而是在所有任务依赖项之后运行它。您只是想知道执行dist的所有任务所需的时间,还是需要按顺序执行这些任务?编辑:(我先读了您的评论) - Rigotti
能够看到每个单独任务所需的时间也很重要吗? - lukewestby
我知道构建不是首先运行的。这就是为什么我想知道是否可以从任务内部简单地调用其他任务。在某些情况下,任务是异步运行的。在某些情况下,它们是同步的。这取决于任务本身以及它们是否相互依赖。我想我只是想要总时间。 - Jake Wilson
1个回答

1
我想你可以使用runSequence插件来实现你想做的事情。
由于你的build任务的唯一目的是以没有特定顺序的方式启动所有的build-*任务,因此可以看作是这样的:
var rs = require('run-sequence');

gulp.task('build', function (cb) {
  rs(['build-css', 'build-html', 'build-js', 'build-images'], cb);
});

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