我使用Gulp 4,我有这个任务:
gulp.task('deploy', gulp.series('clean', 'handlers:all', 'deployment'));
该任务调用其他三项任务:
clean
:删除构建文件夹。handlers:all
:重新创建构建文件夹并在其中添加文件。deployment
:将构建文件夹的内容传输到其他位置我对deployment
的任务有问题,看起来像这样:
gulp.task('deployment', done => {
gulp.src('./build/')
.pipe(gulp.dest('../other-project/'));
});
gulp.src()找不到build文件夹,因为它已被任务clean
删除。当我设置超时时没有问题。但这个解决方案很糟糕。
gulp.task('deployment', done => {
setTimeout(() => {
gulp.src('./build/')
.pipe(gulp.dest('../other-project/'));
}, 2000);
});
如何解决这个问题?
任务clean
:
gulp.task('clean', done => {
del('./build/');
done();
});
任务handlers:all
:
gulp.task('handlers:all', gulp.parallel('scripts', 'templates', 'styles', 'fonts', 'favicons', 'images', 'svg', 'dist'));
答案 0 :(得分:1)
尝试将clean
任务替换为下一个任务:
gulp.task('clean', done => {
del('./build/').then(() => done());
});
它需要因为del
包返回一个承诺而你应该告诉gulp等到它将被解决。另一个选项可以是del.sync
。
我不确定剩下的任务,但它应该遵循相同的过程。如果您有任何异步任务 - 请在正确的位置拨打done
。
它可能对您有用async vs sync
希望它有意义。