React Native Web运行异常:process未定义及dispatcher为空问题求助
解决方案:Expo Web端「process is not defined」和「dispatcher is null」错误修复
你的问题核心在于混用了Expo构建流程与Create React App的react-scripts工具,同时手动指定Webpack版本导致依赖冲突,以下是分步修复方案:
1. 清理package.json配置冲突
首先修正脚本与依赖的冲突问题,Expo Web有独立的构建流程,不需要react-scripts:
更新后的package.json
{ "name": "bigapp", "version": "1.0.0", "main": "node_modules/expo/AppEntry.js", "scripts": { "start": "expo start", "android": "expo start --android", "ios": "expo start --ios", "web": "expo start --web" }, "dependencies": { "expo": "~46.0.9", "expo-status-bar": "~1.4.0", "react": "18.0.0", "react-native": "0.69.5" }, "devDependencies": { "@babel/core": "^7.12.9" }, "private": true }
- 删除重复的
start脚本、react-scripts相关命令及preinstall钩子 - 移除手动指定的
webpack、react-scripts、react-error-overlay依赖(Expo会自动管理兼容的版本)
2. 添加Webpack配置解决「process is not defined」
Expo Web使用Webpack 5,默认不再注入process全局变量,需手动添加配置:
在项目根目录创建webpack.config.js文件:
const createExpoWebpackConfigAsync = require('@expo/webpack-config'); module.exports = async function (env, argv) { const config = await createExpoWebpackConfigAsync(env, argv); // 注入process环境变量 config.plugins.push( new require('webpack').DefinePlugin({ 'process.env': JSON.stringify({ ...process.env, NODE_ENV: env.mode || 'development' }) }) ); return config; };
3. 清理缓存并重新安装依赖
执行以下命令彻底重置依赖环境:
rm -rf node_modules package-lock.json npm install
4. 启动Web端
npm run web
问题根源说明
- 脚本冲突:你同时定义了Expo和react-scripts的
start命令,导致启动时加载错误的构建配置 - 依赖版本不兼容:手动指定Webpack 4与Expo 46依赖的Webpack 5冲突,引发
process变量缺失 - 架构冲突:react-scripts是Create React App的构建工具,与Expo的跨平台架构不兼容,导致「dispatcher is null」这类React运行时错误
内容的提问来源于stack exchange,提问作者DeeTee
相关产品推荐
相关产品推荐

