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

Azure Pipeline执行Gulp任务遇“did you forget to signal async completion?”错误求助

Gulp任务在Azure Pipeline中报错“did you forget to signal async completion?”

我知晓这可能是重复问题,但已花费近一天时间仍未解决。我的gulpfile.js代码如下:

const gulp = require('gulp');
const javascriptObfuscator = require('gulp-javascript-obfuscator');
gulp.task("javascriptObfuscator", (done) => {
  gulp.src('./js/**/*.js', {base: './'})
    .pipe(javascriptObfuscator())
    .pipe(gulp.dest('./'))
  done();
});

在Azure Pipeline的Gulp任务中执行该文件时,遇到错误提示“did you forget to signal async completion?”,恳请技术支持。


这个问题我之前也碰到过,核心原因是Gulp 4.x对异步任务的完成信号要求比旧版本严格太多。你现在的代码里,done()是在文件流刚开始执行就立刻调用了,完全没等文件混淆、输出这些异步操作完成,Gulp就误以为任务已经结束,所以抛出了这个错误。

给你两个可行的修复方案:

方案1:返回流(推荐)

Gulp的流本身就是异步对象,只要把gulp.src()启动的流返回出去,Gulp就能自动跟踪它的完成状态,根本不需要手动调用done():

const gulp = require('gulp');
const javascriptObfuscator = require('gulp-javascript-obfuscator');
gulp.task("javascriptObfuscator", () => {
  // 直接返回流,让Gulp自动监听完成状态
  return gulp.src('./js/**/*.js', {base: './'})
    .pipe(javascriptObfuscator())
    .pipe(gulp.dest('./'));
});

方案2:在流完成后调用done()

如果你一定要用done()回调的写法,就得把它绑定到流的end事件上,确保所有异步操作都完成后再通知Gulp:

const gulp = require('gulp');
const javascriptObfuscator = require('gulp-javascript-obfuscator');
gulp.task("javascriptObfuscator", (done) => {
  gulp.src('./js/**/*.js', {base: './'})
    .pipe(javascriptObfuscator())
    .pipe(gulp.dest('./'))
    // 监听流结束事件,完成后再调用done
    .on('end', done);
});

这两个方案都能解决你在Azure Pipeline里遇到的错误,个人推荐方案1,代码更简洁也符合Gulp的最佳实践。

内容的提问来源于stack exchange,提问作者Dharmendra Singh Negi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:48:44