如何修复formidable的Error [ERR_REQUIRE_ESM]错误?
解决ERR_REQUIRE_ESM:CommonJS引入ES模块formidable失败问题
错误信息
Error [ERR_REQUIRE_ESM]: require() of ES Module C:\Users\Admin\Desktop\Server\node_modules\formidable\src\index.js from C:\Users\Admin\Desktop\Server\back\productController.js not supported. Instead change the require of index.js in C:\Users\Admin\Desktop\Server\back\productController.js to a dynamic import() which is available in all CommonJS modules. at Object.<anonymous> (C:\Users\Admin\Desktop\Server\back\productController.js:5:20) at Object.<anonymous> (C:\Users\Admin\Desktop\Server\server.js:15:27) { code: 'ERR_REQUIRE_ESM' }
Node.js v18.16.1
修复方案
1. 用动态import()适配CommonJS环境
如果项目还是CommonJS模块(未设置"type": "module"),不能直接用静态import,必须用动态import(),它返回Promise,需配合async/await或.then():
示例(async/await写法):
// productController.js // 方法内使用 async function processProductUpload() { const formidable = await import('formidable'); const form = formidable({ multiples: true }); // 后续处理逻辑 } // 顶层使用(Node.js 14.8+支持) // const formidable = await import('formidable');
2. 切换项目为ES模块
想直接用静态import的话,把项目改成ES模块:
- 在根目录
package.json中添加:{ "type": "module" } - 之后所有
.js文件默认是ES模块,可直接写:import formidable from 'formidable'; - 注意:切换后要把所有
require、module.exports替换成ES模块语法。
3. 降级formidable到CommonJS版本
不想改代码结构的话,安装v3之前的兼容版本:
npm uninstall formidable npm install formidable@2.1.2
安装后可继续用require('formidable')。
内容的提问来源于stack exchange,提问作者Misha Povroznyk
相关产品推荐
相关产品推荐

