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

Webpack打包React应用出现React未定义问题的配置方案问询

Webpack打包React时提示React未定义的解决方案

问题详情

使用Webpack(未开启压缩)打包默认React应用,运行时bundle.js报错React is not defined,报错代码片段:

function App_App() {
  return /*#__PURE__*/React.createElement("div", {
    className: "App"

排查发现Webpack将React模块导入为小写变量react,但编译后的代码仍在使用大写的React.createElement:

// EXTERNAL MODULE: ./node_modules/react/index.js
var react = __webpack_require__(294);

手动把代码里的React替换为react后,bundle就能正常加载。

复现步骤

npx create-react-app w && cd w
npm i -D @babel/core @babel/preset-env @babel/preset-react babel-loader css-loader html-webpack-plugin sass sass-loader style-loader url-loader webpack webpack-cli webpack-dev-server
cp ./public/* ./src

创建.babelrc和webpack.config.js后执行打包:

npx webpack --mode production

打开/dist/index.html会显示空白页面。

解决配置

问题根源是Babel未启用React 17+的自动JSX转换,只需修改以下配置:

1. 更新.babelrc配置

给@babel/preset-react添加runtime: "automatic"选项,让Babel自动处理React API的导入,不再依赖全局的React变量:

{
  "presets": [
    "@babel/preset-env",
    ["@babel/preset-react", { "runtime": "automatic" }]
  ]
}

2. 清理冗余导入(可选)

如果你的组件文件里写了import React from 'react';,可以直接删除,因为自动运行时会自动导入所需的React API。

3. 重新打包验证

执行打包命令:

npx webpack --mode production

此时编译后的代码会自动使用正确的API引用方式,不会再出现React is not defined的错误。

原理说明

React 17及以上版本支持自动JSX转换,@babel/preset-react的runtime: "automatic"配置开启这个特性后,Babel会把JSX编译成_jsx/_jsxs函数调用,而不是依赖全局的React.createElement,从根本上避免了变量大小写不匹配的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:34:53