You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级到Gulp 4后async-done报time参数需为Array类型错误如何解决

报错根因

该错误由Gulp 4的异步任务识别逻辑冲突导致:你给返回Stream流的任务函数额外添加了async关键字,Gulp内置的async-done依赖会同时尝试捕获两种异步结束信号(Promise信号 + Stream结束信号),内部计时参数处理异常,最终抛出time参数类型错误。

解决方法

方案1:移除多余的async关键字(推荐)

Gulp 4原生支持直接返回Stream的任务格式,不需要额外加async标识,修改后代码如下:

function images() {
  return gulp
    .src('assets/img/**/*')
    .pipe(newer('assets/build/img'))
    .pipe(imagemin())
    .pipe(gulp.dest('assets/build/img'))
    .pipe(notify({ message: 'Images task complete' }));
}

// 两种注册任务方式二选一即可
// 方式1:用字符串名注册,支持gulp images命令调用
gulp.task('images', images);
// 方式2:直接导出,符合Gulp 4官方规范
// exports.images = images;

方案2:保留async语法的适配方案

如果你的任务中确实需要用到await等async专属语法,不要同时返回Stream,改用node内置的stream pipeline工具封装异步流程:

const { promisify } = require('util');
const streamPipeline = promisify(require('stream').pipeline);

async function images() {
  await streamPipeline(
    gulp.src('assets/img/**/*'),
    newer('assets/build/img'),
    imagemin(),
    gulp.dest('assets/build/img')
  );
  notify({ message: 'Images task complete' });
}

exports.images = images;

额外排查项

如果修改后仍出现同类报错,确认以下两点配置:

  • 所有任务函数不要同时混用两种及以上异步标识(不要同时出现返回Stream + 加async + 调用callback的写法)
  • 全局gulp-cli版本升级到v2.3.0及以上,和本地安装的Gulp 4版本匹配

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 21:15:03