gulp任务是否必须返回任何内容?

Dre*_*kes 39 javascript build-process gulp

在显示gulp使用情况的在线示例中,某些任务返回流,而其他任务则不返回.

例如,没有退货:

gulp.task('tsc', function()
{
    gulp.src('**/*.ts')
        // ...
});
Run Code Online (Sandbox Code Playgroud)

和相同的代码,返回:

gulp.task('tsc', function()
{
    return gulp.src('**/*.ts')
        // ...
});
Run Code Online (Sandbox Code Playgroud)

是否有必要返回流?

Dre*_*kes 37

如果不返回流,则其调用者不会等待每个任务的异步结果,也不会查找任何相关任务.

例如,当不返回流时:

$ gulp scripts
[21:25:05] Using gulpfile ~/my-project/gulpfile.js
[21:25:05] Starting 'tsc'...
[21:25:05] Finished 'tsc' after 13 ms
[21:25:05] Starting 'scripts'...
[21:25:05] Finished 'scripts' after 10 ms
[21:25:05] Compiling TypeScript files using tsc version 1.0.1.0
Run Code Online (Sandbox Code Playgroud)

请注意,scripts任务取决于tsc任务.它报告说它tsc在13毫秒内完成,这绝对太快而无法合理地相信.然后,scripts任务似乎在很短的时间内开始并完成.最后,tsc开始实际操作.显然既不是tsc也没有scripts等待编译步骤完成.

当这些任务返回其流时,输出看起来相当不同:

$ gulp scripts
[21:42:25] Using gulpfile ~/my-project/gulpfile.js
[21:42:25] Starting 'tsc'...
[21:42:25] Compiling TypeScript files using tsc version 1.0.1.0
[21:42:32] Finished 'tsc' after 6.65 s
[21:42:32] Starting 'scripts'...
[21:42:32] Finished 'scripts' after 204 ms
Run Code Online (Sandbox Code Playgroud)

这里的序列是有意义的,报告的持续时间符合预期.

  • 如果您有一个异步但不涉及流的gulp任务怎么办?你能调用`done()`函数还是返回一个promise? (7认同)