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

npm run build编译转译App.js失败 疑似ES6与CommonJS不匹配

报错根因

这个冲突本质是模块规范不匹配导致的:你当前使用的前端构建工具(Vite/Rollup/5.x以上版本Webpack)默认要求输入源码遵循ES Module规范做静态分析,但你的tsconfig配置将TS转译输出的模块格式设为了CommonJS。TS转译CommonJS模块时会自动注入__esModule标识属性,构建工具做根节点导出聚合时,会检测到同名的__esModule导出标记,直接触发命名冲突报错。

修复方案

按优先级依次操作即可:

  • 修改tsconfig.json的模块输出配置,把compilerOptions.module的值从commonjs改为ESNext,让TS输出符合构建工具预期的ES Module格式代码。如果你使用React17及以上版本,可以顺便把jsx配置从react改为react-jsx,省去每个组件文件手动导入React的冗余代码。修改后的核心配置段如下:
"compilerOptions": {
    "jsx": "react-jsx",
    "target": "es6",
    "lib": ["dom", "esnext"],
    "module": "ESNext",
    "moduleResolution": "node",
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "strict": true,
    "skipLibCheck": true
}
  • 检查项目入口或路由聚合文件,是否存在export * from './src/App'这类全量转发App模块导出的写法。如果有,替换为明确的具名导出或默认导出转发,不要做全量通配符导出,避免把转译过程注入的内置标记属性也一并向外转发。
  • 清理构建缓存后重新执行构建:删除项目下的node_modules/.cache目录,再运行npm run build即可。
特殊兼容场景处理

如果项目有特殊需求必须保留TS输出CommonJS格式(比如需要兼容存量Node侧脚本逻辑),不要提前用tsc把TS文件编译成CommonJS规范的中间JS文件再交给构建工具处理:

  • 用Vite的场景:移除package.json构建脚本中tsc提前编译输出JS的步骤,直接执行vite build,Vite内部会通过esbuild完成TS转译,默认输出ES Module格式,不会触发冲突。
  • 用Webpack的场景:调整构建流程,让ts-loader在Webpack编译链路中直接处理TS文件,不要提前跑tsc生成CommonJS格式的中间JS文件供Webpack消费。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:18:23