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

Gulp 4使用@rollup/stream且tsconfig target为es6时任务无法正常结束

方案1:保留target: "es5"配置,解决__spreadArray导出报错

该方案无需调整现有构建流程逻辑,从报错根因直接修复,优先级更高:

  • 报错原因:你更新的内部TS库使用TS 4.2+版本编译,新增了__spreadArray辅助函数,该函数仅在tslib@2.1.0及以上版本提供,你当前项目依赖的低版本tslib没有对应导出。
  • 修复步骤:
    1. 执行命令安装高版本tslib:
    npm install tslib@^2.6.0 --save
    
    1. 在tsconfig.json的compilerOptions中新增配置,开启辅助函数自动导入:
    "importHelpers": true
    
    1. 将tsconfig.json的target改回es5,重新执行构建即可,既不会出现__spreadArray报错,也不会触发rollup任务挂起问题。

方案2:target: es6场景下rollup任务挂起的修复

如果需要继续使用es6作为编译目标,可通过以下方式解决进程挂起问题:

  • 问题根因:你当前使用的@rollup/stream@1.1.0存在已知兼容bug,构建完成后不会主动销毁内部rollup实例,导致进程持有句柄无法退出,该问题在2.0及以上版本已修复。
  • 修复步骤:
    1. 升级@rollup/stream到稳定版本:
    npm install @rollup/stream@^3.0.1 --save-dev
    
    1. 若升级后仍有问题,可在rollup配置中新增cache: false关闭内部缓存,同时手动监听流结束事件强制清理资源,修改rollupTask如下:
    function rollupTask (cb) {
      const stream = rollup({
          input: "./src/main.ts",
          cache: false,
          external: [
              "lodash",
          ],
          output: {
              format: "cjs",
              sourcemap: true
          },
          plugins: [
              typescript(),
          ],
      })
      .pipe(source("common.bundle.js"))
      .pipe(buffer())
      .pipe(gulpif(production, terser()))
      .pipe(gulp.dest('./dist'));
    
      stream.on('end', () => {
        cb();
        setTimeout(() => process.exit(0), 100); // 极端情况下兜底退出
      });
      stream.on('error', cb);
      return stream;
    };
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:27:02