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

使用vite preview预览React项目时出现require未定义错误求助

React + Vite 3.0 预览时出现require is not defined问题排查与解决

问题场景

  • 使用环境:Vite 3.0.8、@vitejs/plugin-react 2.0.1、React项目、npm 8.16.0、Node 16.17.0
  • 原始Vite配置(vite.config.js):
import {defineConfig} from 'vite'
import react from '@vitejs/plugin-react'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [react()],
  build: {
    outDir: 'build',
  },
})
  • 执行vite preview后报错:

Uncaught ReferenceError: require is not defined
at index.aef3ad2c.js:346:199702
at index.aef3ad2c.js:1:142
at index.aef3ad2c.js:368:141758

  • 排查细节:错误涉及crypto-js,但npm list crypto-js返回空;已尝试删除node_modules重装、添加@originjs/vite-plugin-commonjs配置(针对react-s3),问题未解决。

问题原因

  • 隐式依赖的CommonJS模块:crypto-js是react-s3的间接依赖,该依赖未被转译为ES模块,仍保留Node.js的require语法,而浏览器环境原生不支持require。
  • 转译范围不全:仅针对react-s3配置esbuildCommonjs,但实际触发问题的是其深层依赖crypto-js,转译未覆盖到该模块。

解决办法

方案1:扩展CommonJS转译范围

修改vite.config.js,将crypto-js也加入esbuildCommonjs的转译列表,同时确保配置放在optimizeDeps下,让预构建阶段就处理这些依赖:

import {defineConfig} from 'vite'
import react from '@vitejs/plugin-react'
import {viteCommonjs, esbuildCommonjs} from '@originjs/vite-plugin-commonjs'

export default defineConfig({
  plugins: [viteCommonjs(), react()],
  build: {
    outDir: 'build',
  },
  optimizeDeps: {
    esbuildOptions: {
      plugins: [esbuildCommonjs(['react-s3', 'crypto-js'])],
    },
  },
})

方案2:替换兼容ES模块的依赖

如果react-s3长期未维护,可替换为支持ES模块的S3操作库(如AWS SDK v3的浏览器版本),从根源避免CommonJS兼容问题。

方案3:临时添加require polyfill(不推荐)

在项目入口文件(如src/main.jsx)顶部添加代码,模拟Node.js的require行为:

window.require = (module) => import(module)

此方案仅作为临时 workaround,可能引发其他兼容问题,不建议长期使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:06:32