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

Angular迁移至新构建系统后@aws-sdk/lib-storage的Upload功能失效

AWS S3上传在Angular新构建系统下报错:Cannot read properties of undefined (reading 'done')

问题分析

这个错误本质是Upload实例的done()方法未被正确加载,大概率是Angular构建系统迁移(比如切换到ESBuild)后,模块解析或tree shaking规则变化导致AWS SDK的代码未被正确处理。

解决方案

1. 统一AWS SDK依赖版本

确保@aws-sdk/lib-storage和@aws-sdk/client-s3版本完全一致,版本不匹配会导致内部依赖异常:

# 查看当前版本
npm list @aws-sdk/lib-storage @aws-sdk/client-s3

# 升级到最新稳定版
npm install @aws-sdk/lib-storage@latest @aws-sdk/client-s3@latest

2. 调整Angular构建配置

新构建系统(如ESBuild)对CommonJS模块的处理更严格,需在angular.json中允许相关依赖:

"projects": {
  "your-project-name": {
    "architect": {
      "build": {
        "options": {
          // 其他配置...
          "allowedCommonJsDependencies": [
            "@aws-sdk/lib-storage",
            "@aws-sdk/client-s3"
          ]
        }
      }
    }
  }
}

3. 强制导入ESM模块入口

直接指定SDK的ESM版本入口,避免构建系统解析错误:

import { Upload } from "@aws-sdk/lib-storage/dist-esm/index.js";
import { S3Client } from "@aws-sdk/client-s3/dist-esm/index.js";

4. 验证S3Client初始化完整性

确保S3Client配置正确,初始化失败可能导致实例异常:

const s3Client = new S3Client({
  region: "us-east-1", // 替换为你的区域
  credentials: {
    accessKeyId: "YOUR_ACCESS_KEY",
    secretAccessKey: "YOUR_SECRET_KEY"
  }
});

const parallelUploads3 = new Upload({
  client: s3Client,
  params: { Bucket: "your-bucket", Key: "file-key", Body: file }
});

原因说明

Angular新构建系统(如ESBuild)相比旧Webpack,tree shaking更激进,且对CommonJS模块的兼容性处理不同。AWS SDK部分模块仍使用CommonJS格式,若未正确配置,构建工具可能误删done()方法相关代码,或导致模块加载不完整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 21:25:16