【问题标题】:Does a gulp task have to return anything?gulp 任务是否必须返回任何内容?
【发布时间】:2014-11-22 14:51:50
【问题描述】:

在显示 gulp 用法的在线示例中,一些任务返回流,而另一些则不返回。

例如,没有返回:

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

同样的代码,有一个返回:

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

是否需要返回流?

【问题讨论】:

    标签: javascript build-process gulp


    【解决方案1】:

    如果你不返回一个流,那么每个任务的异步结果将不会被它的调用者等待,也不会被任何依赖的任务。

    例如,当不返回流时:

    $ 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
    

    这里的顺序是有意义的,并且报告的持续时间符合预期。

    【讨论】:

    • 如果你有一个异步但不涉及流的 gulp 任务怎么办?你可以调用done() 函数或返回一个promise 吗?
    • 您可以定义任务,使其接受回调函数作为最终参数,或者您可以返回一个承诺。见这里:github.com/gulpjs/gulp/blob/v3.9.1/docs/…
    猜你喜欢
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 2011-05-22
    • 1970-01-01
    相关资源
    最近更新 更多