React构建报错__WEBPACK_DEFAULT_EXPORT__初始化前访问解决方法
问题现象
React项目开发构建时触发运行时报错:
Uncaught ReferenceError: Cannot access '__WEBPACK_DEFAULT_EXPORT__' before initialization
报错定位在Row.js 第18行,完整错误调用栈如下:
Uncaught ReferenceError: Cannot access '__WEBPACK_DEFAULT_EXPORT__' before initialization at Module.default (Row.js:18:1) at ./src/axios.js (axios.js:2:1) at options.factory (react refresh:6:1) at __webpack_require__ (bootstrap:24:1) at fn (hot module replacement:62:1) at ./src/Banner.js (App.js:20:1) at options.factory (react refresh:6:1) at __webpack_require__ (bootstrap:24:1) at fn (hot module replacement:62:1) at ./src/App.js (bundle.js:18:65)
复现规则:在Row.js文件中编写fetchUrl、useState、useEffect相关代码时必现该错误。
根因分析
该错误是模块循环依赖导致的初始化顺序异常。
从调用栈可以看到webpack的模块加载链路为:App.js → Banner.js → axios.js → Row.js。如果链路中存在反向引用(比如Row.js引入的模块又反过来依赖还没初始化完成的Row模块),webpack处理ESM默认导出时,会在模块代码还没执行完成时就尝试读取__WEBPACK_DEFAULT_EXPORT__,直接触发引用提前的报错。
高频触发场景:
- 基础请求文件
axios.js反向引入了业务组件(Row/Banner)或者业务组件里导出的变量,形成循环引用 - 组件导出顺序错误,在组件/变量定义完成前就执行了默认导出
- 同文件内混用CommonJS(
module.exports/require)和ESM(import/export)模块语法,导致webpack解析导出顺序混乱 - 自定义请求hook、状态逻辑存在跨文件循环引用
修复步骤
按优先级逐一排查处理:
- 打断循环依赖链路
逐个检查App.js、Banner.js、axios.js、Row.js的import语句,找到反向引用的代码:比如axios.js里如果引入了Row组件、Row里定义的常量/方法,把这部分逻辑拆分到独立的无依赖公共文件(比如公共常量放constants.js、公共请求方法放api.js),保证基础依赖文件(axios封装、工具函数)不反向依赖上层业务组件。 - 修正组件导出写法
检查Row.js的导出逻辑,必须保证组件、状态变量定义完成后再执行导出,不要提前导出:
同时统一全项目模块语法,不要在同一个文件内混用// ❌ 错误写法:提前导出触发初始化顺序异常 export default Row; function Row() { const [list, setList] = useState([]) // useEffect、fetchUrl相关逻辑 } // ✅ 正确写法:先定义组件,最后导出 function Row() { const [list, setList] = useState([]) useEffect(() => { // fetchUrl请求逻辑 }, [fetchUrl]) // 其余组件逻辑 } export default Row;module.exports和import/export,全部使用ESM规范语法即可。 - 规范axios封装逻辑
axios.js作为基础请求层文件,只允许被上层业务文件引入,不能在其中引入任何业务组件、业务页面相关的代码。如果拦截器、请求配置里用到业务相关参数,把参数抽离到不依赖业务组件的独立配置文件后再引入。 - 清理缓存重启服务
代码修改完成后,删除项目下node_modules/.cache目录,重新执行启动命令(npm start/yarn start),清除webpack热更新的旧缓存,避免缓存导致的假报错。
内容的提问来源于stack exchange,提问作者Shashwat Sharma
相关产品推荐
相关产品推荐

