Node.js中require()无法使用,无法导入已下载npm模块求助
解决Node.js中require()加载ESM模块的ERR_REQUIRE_ESM错误
错误核心原因
你遇到的ERR_REQUIRE_ESM错误,问题不在你的代码本身,而是你尝试用require()导入的第三方库是纯ES模块(ESM)格式。现在大量新发布的npm包仅提供ESM版本,不再支持CommonJS的require()语法,这才是触发错误和VS Code提示的根本原因。
快速排查验证
先确认第三方库的模块类型:
- 打开项目中
node_modules/目标模块名/package.json - 检查是否存在以下字段:
"type": "module":直接声明该库为ESM"exports":指定了ESM格式的入口文件(比如".": "./dist/index.mjs")"module":指向ESM格式的输出文件
如果有以上任意一种情况,说明这个库不支持require()导入。
可行解决方案
根据你想继续使用require()的需求,可选择以下方案:
1. 用动态导入兼容ESM模块
CommonJS环境中可以通过import()函数动态加载ESM模块,需要用异步函数包裹逻辑:
async function initApp() { // 动态导入目标ESM模块 const targetModule = await import('目标模块名'); // 注意:默认导出取targetModule.default,命名导出直接取对应属性 const { someFunction } = targetModule; // 后续业务逻辑 } initApp();
2. 查找库的CommonJS兼容版本
部分库会同时发布两种模块格式:
- 查看库的npm文档,确认是否有专门的CommonJS包(比如
lodash是CommonJS版本,lodash-es是ESM版本) - 检查库的
package.json中是否有"main"字段指向CommonJS格式的.js文件(且该文件所在目录无"type": "module"声明)
3. 使用esm工具实现兼容加载
安装esm包(注意不是你之前装的common-js):
npm install esm --save-dev
然后用以下命令运行你的代码:
node -r esm index.js
这个工具会让Node.js在CommonJS环境中支持加载ESM模块。
4. 切换到ES模块语法(备选)
如果以上方案都不适用,可考虑改用import/export:
- 在你的
package.json中添加"type": "module" - 将所有
require()替换为import,module.exports替换为export
补充说明
VS Code的提示是因为其语言服务检测到你导入的是ESM模块,知道require()存在兼容性问题,所以建议切换到ES语法——这和你的代码是否为ESM无关,完全由第三方库的模块类型导致。
内容的提问来源于stack exchange,提问作者vladix
相关产品推荐
相关产品推荐

