如何在IE 11中使用AWS JavaScript Promises?解决require未定义报错
解决IE11下AWS SDK使用Bluebird Promise的问题 + 「require is not defined」报错修复
我刚好处理过类似的场景,给你一步步拆解解决方案:
问题根源
- IE11不支持原生Promise,所以必须用Bluebird这类库做兼容;
- 你之前报错「Uncaught ReferenceError: require is not defined」,是因为直接用了Node.js环境的AWS SDK写法(依赖
require),但浏览器里没有这个Node专属的模块加载函数。
方案1:纯浏览器环境(无打包工具)
这种方式最直接,适合快速验证或简单项目:
按顺序加载依赖脚本
先引入Bluebird,再引入AWS SDK的浏览器专用版本(不要用npm下载的Node版):<!-- 引入兼容IE11的Bluebird版本(3.x系列对IE11友好) --> <script src="https://cdn.jsdelivr.net/npm/bluebird@3.7.2/js/browser/bluebird.min.js"></script> <!-- 引入AWS SDK浏览器版(从AWS CDN或本地加载) --> <script src="https://sdk.amazonaws.com/js/aws-sdk-2.1000.0.min.js"></script>配置AWS SDK使用Bluebird
在你的业务代码里,告诉AWS SDK用Bluebird代替原生Promise:// 关键:让AWS SDK依赖Bluebird的Promise实现 AWS.config.setPromisesDependency(Bluebird); // 接下来正常使用带Promise的AWS方法 const s3Client = new AWS.S3({ accessKeyId: '你的AccessKey', secretAccessKey: '你的SecretKey', region: '你的区域' }); // 用promise()方法调用,Bluebird会处理IE11的兼容 s3Client.listBuckets().promise() .then(response => { console.log('获取到的存储桶列表:', response.Buckets); }) .catch(error => { console.error('请求出错:', error); });
方案2:用打包工具(Webpack/Browserify)
如果你的项目用了现代前端构建工具,可以这么处理:
安装依赖
npm install aws-sdk bluebird --save在代码中配置Promise依赖
这里的require会被打包工具转换成浏览器能识别的代码,不会报错:const Bluebird = require('bluebird'); const AWS = require('aws-sdk'); // 同样指定Bluebird作为Promise实现 AWS.config.setPromisesDependency(Bluebird); // 后续正常使用AWS SDK的Promise API即可 const dynamoDb = new AWS.DynamoDB(); dynamoDb.listTables().promise().then(/* ... */);额外配置(针对IE11)
记得在打包工具中配置Babel,转译ES6+语法到IE11支持的版本,同时确保Bluebird的代码被正确打包进去。
注意事项
- Bluebird尽量选3.x版本,最新的4.x系列已经放弃了IE11支持;
- AWS SDK的浏览器版可以从AWS官方CDN获取,也可以下载到本地托管,版本号可以根据需求调整;
- 如果用打包工具,不要直接在浏览器中运行未打包的Node风格代码,必须经过构建流程转换。
内容的提问来源于stack exchange,提问作者Jesse Barnum
相关产品推荐
相关产品推荐

