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

陷入exports未定义与require不支持ES模块的循环错误,求解决方案

解决ES模块与CommonJS循环兼容问题

你的问题根源是项目模块系统不统一,同时TypeScript编译配置和运行环境的模块规则冲突,导致在ES模块和CommonJS之间反复切换都报错。以下是两种可行的解决路径:

路径一:统一使用ES模块

  1. 保留package.json中的"type": "module"配置,明确项目为ES模块环境
  2. 修改tsconfig.json的编译配置,让输出和运行环境匹配:
{
    "compilerOptions": {
      "target": "ES2020", // 选择更适配ES模块的目标版本,放弃ES5的老旧兼容
      "module": "NodeNext", // 对齐Node.js的ES模块处理规则
      "moduleResolution": "NodeNext",
      "lib": ["ES2020"],
      "sourceMap": true,
      "outDir": "./dist" // 指定编译输出目录,方便管理
    },
    "include": ["src/**/*"] // 确保所有源码文件被编译覆盖
}
  1. 适配代码与依赖:
    • 将代码中所有require()调用替换为ES模块的import语法
    • 若必须使用CommonJS格式的依赖,用动态import()语法加载,示例:const lodash = await import('lodash')

路径二:统一使用CommonJS模块

  1. 移除package.json中的"type": "module"配置,默认使用CommonJS环境
  2. 修改tsconfig.json的编译配置,让TypeScript输出CommonJS格式代码:
{
    "compilerOptions": {
      "target": "ES5", // 保留原目标版本需求
      "module": "CommonJS", // 指定输出CommonJS模块格式
      "moduleResolution": "Node",
      "lib": ["es2015"],
      "sourceMap": true,
      "outDir": "./dist"
    },
    "include": ["src/**/*"]
}
  1. 兼容ES模块风格导入(可选):
    在tsconfig.json的compilerOptions中添加以下配置,允许用ES模块语法导入CommonJS依赖:
"allowSyntheticDefaultImports": true,
"esModuleInterop": true

循环报错的原因

  • 添加"type": "module"后,Node.js将所有.js文件视为ES模块,此时代码或依赖中的require()属于CommonJS语法,自然不被支持
  • 移除该配置后,Node.js默认采用CommonJS规则,但你的TypeScript编译输出是ES6模块(module: ES6),CommonJS环境无法直接识别ES模块的export语法,因此报exports is not defined

内容的提问来源于stack exchange,提问作者pumpchief

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 18:52:36