You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 23:10:44