Gulp任务不同步运行

时间:2016-01-29 07:05:42

标签: gulp bower

我正在尝试通过bower安装软件包,一旦安装完成,我希望将文件从dist文件夹移动到其父文件夹,然后删除dist文件夹。但不知何故,它无法正常工作。

filter

这是我到现在所写的。 在凉亭之后,剩下的两个任务都没有运行。但如果我单独运行它们,它们的工作完全正常。

我无法弄清楚这里出了什么问题。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

问题是您返回事件流的数组查看您的delete-dist-folder任务。您return taskstasks是通过调用数组上的.map创建的。所以tasks是一个数组(事件流)。

Gulp不知道如何处理数组并假设您的任务是同步的。将任务标记为异步只有3种方法:1)返回偶数流; Gulp将等待流程结束,2)返回一个承诺; Gulp将等待承诺被解决或拒绝,或者3)声明您的任务回调以获取您在任务完成时将调用的单个参数; Gulp将等待回调被调用。事件流数组与这些选项中的任何一个都不对应。

Gulp wiki suggest using merge-stream从任务中返回多个流。根据{{​​1}}的代码判断,并假设您将merge-stream导入为merge-stream,您可以执行merge

侧节点:在return merge.apply(undefined, tasks)任务中,您忘记返回值。

答案 1 :(得分:-1)

我在嵌套任务时有一个类似的问题(在另一个任务中需要一个任务)。因此,为了解决这个问题并按顺序运行任务,我使用了run-sequence

您似乎已安装run-sequence。以这种方式使用它:

runSequence = require('run-sequence');

    gulp.task('default', function(callback) {
      runSequence('clean', 'bower', 'moveFiles', 'delete-dist-folder',
                 callback);
    });

希望这可能会对你有所帮助。您可以参考this获取任何帮助。 这是一个临时解决方案,直到gulp 4.0,其中包括并行或顺序配置任务的选项。