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

Express实现React SSR时导入App.jsx报ERR_MODULE_NOT_FOUND错误

React SSR 报 ERR_MODULE_NOT_FOUND 排查及解决方案

这个报错和你用 CommonJS 还是 ES Module 没有直接关系,核心是 Node.js 原生环境不支持 JSX/TSX 语法解析,也不会自动补全这类 React 组件文件的后缀,按以下顺序排查即可:

  • 首先补全导入语句的完整文件后缀
    ESM 模式下 Node 不会自动补全 .js/.jsx/.ts/.tsx 后缀,你当前写的导入路径 '../client/src/App' 会被Node直接判定为不存在。先去本地目录确认App文件的实际后缀,把导入语句改成完整路径:
    // 实际是jsx就写jsx,是tsx就替换成tsx
    import App from '../client/src/App.jsx'
    
    CommonJS 模式下的 require 语句同理,必须写全后缀,不要依赖前端构建工具那套自动补全后缀的解析逻辑。
  • 配置服务端源码转译规则
    Node 本身无法直接运行 JSX 语法,直接导入未转译的React组件就算路径写对了也会报错,两种成熟方案选一个就行:
    • 开发环境快速调试可以用babel实时转译:在服务端入口文件(express.js)的最顶部加入以下注册代码,提前处理所有jsx/tsx文件:
      require('@babel/register')({
        presets: [
          '@babel/preset-env',
          ['@babel/preset-react', { runtime: 'automatic' }]
        ],
        extensions: ['.js', '.jsx', '.ts', '.tsx']
      })
      
      注意这段代码必须放在所有React组件导入语句之前,否则转译不生效。
    • 生产环境直接用构建工具(Webpack/Vite/Rollup)分别打包客户端代码和服务端SSR代码,输出Node可直接执行的纯JS产物,后续运行打包后的服务端文件即可,不需要运行原始源码。
  • 核对路径准确性
    手动打开文件资源管理器进入 F:\ReactApp\client\src\ 目录,确认App文件的实际文件名没有拼写错误,再核对相对路径层级:express.js 位于 server 目录下,向上返回一级到项目根目录,再进入 client/src 目录,../client/src/ 这个层级本身是正确的,重点排查文件名大小写、后缀名问题即可。
  • TypeScript 项目额外检查配置
    如果项目用TS编写,检查 tsconfig.json 里的 moduleResolution 字段:用ESM规范时要设置为 node16 或者 nodenext,不要设置为 bundler,bundler 配置仅适配Vite/Webpack等构建工具,Node原生运行时无法识别该解析规则。

注意:不要直接导入客户端入口的原始源码,客户端代码里如果直接调用了 window、document 等浏览器专属API,就算模块找到也会在服务端运行时报错,SSR场景下要把浏览器相关逻辑全部放到 useEffect 或者客户端专属生命周期里执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:30:56