引入multer-s3报错Cannot find module '@aws-sdk/abort-controller'
问题描述
使用multer和multer-s3实现服务端图片上传功能时,引入multer-s3包触发报错,初始报错信息如下:
Error: Cannot find module '@aws-sdk/abort-controller'
对应的引入代码如下:
const multers3 = require('multer-s3');
当前运行环境为Node.js v16.15.1,完整错误栈信息如下:
node:internal/modules/cjs/loader:936 throw err; ^ Error: Cannot find module '@aws-sdk/abort-controller' Require stack: - /Users/venkat/ecom_server/node_modules/@aws-sdk/lib-storage/dist-cjs/Upload.js - /Users/venkat/ecom_server/node_modules/@aws-sdk/lib-storage/dist-cjs/index.js - /Users/venkat/ecom_server/node_modules/multer-s3/index.js - /Users/venkat/ecom_server/index.js at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15) at Function.Module._load (node:internal/modules/cjs/loader:778:27) at Module.require (node:internal/modules/cjs/loader:1005:19) at require (node:internal/modules/cjs/helpers:102:18) at Object.<anonymous> (/Users/venkat/ecom_server/node_modules/@aws-sdk/lib-storage/dist-cjs/Upload.js:4:28) at Module._compile (node:internal/modules/cjs/loader:1105:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10) at Module.load (node:internal/modules/cjs/loader:981:32) at Function.Module._load (node:internal/modules/cjs/loader:822:12) at Module.require (node:internal/modules/cjs/loader:1005:19) { code: 'MODULE_NOT_FOUND', requireStack: [ '/Users/venkat/ecom_server/node_modules/@aws-sdk/lib-storage/dist-cjs/Upload.js', '/Users/venkat/ecom_server/node_modules/@aws-sdk/lib-storage/dist-cjs/index.js', '/Users/venkat/ecom_server/node_modules/multer-s3/index.js', '/Users/venkat/ecom_server/index.js' ] }
解决方案
报错根因是3.x版本的multer-s3基于AWS SDK v3开发,@aws-sdk/abort-controller是其必需的peer依赖,多数场景下npm/yarn不会自动安装peer依赖,就会触发模块找不到的错误,按以下步骤修复:
- 手动安装multer-s3依赖的全套AWS SDK v3相关包:
使用npm执行以下命令:
使用yarn执行以下命令:npm install @aws-sdk/abort-controller @aws-sdk/client-s3 @aws-sdk/lib-storageyarn add @aws-sdk/abort-controller @aws-sdk/client-s3 @aws-sdk/lib-storage - 如果执行完上述安装后仍报其他AWS SDK相关模块缺失,直接删除项目根目录下的
node_modules文件夹,以及对应包管理器的锁文件(npm对应package-lock.json、yarn对应yarn.lock、pnpm对应pnpm-lock.yaml),重新执行全量依赖安装命令即可。 - 额外排查点:确认你安装的multer-s3版本为3.x及以上,2.x版本的multer-s3适配旧版AWS SDK v2,和新版依赖逻辑不兼容,如果当前装的是2.x版本,先执行卸载再重装最新版:
npm uninstall multer-s3 npm install multer-s3@latest
内容的提问来源于stack exchange,提问作者Venkat Cpr
相关产品推荐
相关产品推荐

