自定义构建AWS SDK v2.247.1遇AWS.CognitoIdentityCredentials构造函数错误
AWS.CognitoIdentityCredentials is not a constructor错误 这个问题的核心原因很明确:你自定义构建SDK的时候漏掉了CognitoIdentity服务模块——AWS.CognitoIdentityCredentials属于Cognito Identity服务(用于身份池管理),而不是你已经包含的Cognito User Pool(cognito-idp)服务。
解决方案步骤:
重新构建SDK,明确包含
cognito-identity服务
如果你是用AWS官方的SDK构建工具(比如aws-sdk-js-builder),确保在构建命令里加上cognito-identity。比如:node builder.js --sdk-version 2.247.1 --services cognito-idp,cognito-identity,dynamodb --output ../assets/scripts/aws-sdk-2.247.1.js这里要注意:
cognito-idp是用户池相关服务,cognito-identity是身份池/凭证相关服务,二者是独立的,必须同时包含才能让CognitoIdentityCredentials正常工作。验证构建后的SDK是否包含目标构造函数
构建完成后,你可以在浏览器控制台里执行以下代码验证:console.log(AWS.CognitoIdentityCredentials);如果输出是
function而不是undefined,说明构建成功包含了该模块。也可以直接打开构建后的js文件,搜索CognitoIdentityCredentials字符串,确认它存在。清理缓存并重新导入
有时候浏览器或者构建工具会缓存旧的SDK文件,导致你导入的还是没有包含CognitoIdentity的版本。建议:- 清空浏览器缓存
- 确保构建后的文件覆盖了旧文件
- 重启本地开发服务器
额外提醒:代码里的一个潜在错误
我注意到你代码里的IdentityPoolId用了environment.USERPOOL_ID,这是错误的!
IdentityPoolId: environment.USERPOOL_ID, // 这里错了!
User Pool ID和Identity Pool ID是完全不同的两个资源ID,你需要在AWS控制台里找到对应的身份池ID,替换成environment.IDENTITY_POOL_ID(或者你环境变量里对应的字段名),否则后续凭证获取也会失败。
内容的提问来源于stack exchange,提问作者Maggy

