一个 gulp 任务必须返回任何东西吗?

40
在展示使用gulp的在线示例中,有些任务会返回流,而有些则不会。例如,没有return关键字:

For example, without a return:

在示例中,没有使用return语句:
gulp.task('tsc', function()
{
    gulp.src('**/*.ts')
        // ...
});

同样的代码,带有返回值:

gulp.task('tsc', function()
{
    return gulp.src('**/*.ts')
        // ...
});

需要返回这个流吗?

1个回答

38

如果您没有返回流,则每个任务的异步结果将不会被其调用方或任何依赖任务等待。

例如,当不返回流时:

$ 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
注意这里,scripts 任务依赖于 tsc 任务。它报告 tsc 完成时间仅为 13 毫秒,这个速度明显过快难以令人信服。然后 scripts 任务似乎立即开始并完成了,也在非常短的时间内完成了。最后,tsc 实际执行编译步骤。很明显,tscscripts 都没有等待编译步骤完成。
当这些任务返回其流时,输出看起来相当不同:
$ 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

这里的顺序很合理,所报告的持续时间符合预期。


7
如果您有一个异步的 gulp 任务,但不涉及流(streams),您能否调用done()函数或返回一个 Promise? - Bill
1
你可以定义任务,使其接受回调函数作为最后一个参数,或者返回一个 Promise。请参见此处:https://github.com/gulpjs/gulp/blob/v3.9.1/docs/API.md#gulptaskname--deps-fn - cliff.meyers

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