React Native run-android异常:JS服务器未启动且报错
Hey,我之前也碰到过一模一样的情况——执行react-native run-android时,命令行显示"starting js server..."但没弹出Node窗口,直接就去启动app了,结果大概率会出现JS bundle加载失败的红屏问题。下面是几个我亲测有效的解决办法:
手动单独启动JS服务器
先关掉当前卡住的命令行窗口,新开一个终端进入你的项目根目录,执行:npm start或者yarn start(看你平时用的包管理器)
这时候应该能看到Metro Bundler的启动日志,或者弹出Node.js的窗口。等服务器完全就绪(一般会显示"Loading dependency graph, done."),再开另一个终端执行react-native run-android,这样app就能正常连接到JS服务器了。手动配置adb反向代理
有时候adb的端口映射会出问题,你可以先手动执行这条命令确保8081端口映射正常:adb reverse tcp:8081 tcp:8081
执行完之后再重新运行react-native run-android试试。杀掉残留的Node进程
可能之前的Node服务器进程没完全关闭,占着端口导致新的服务器启动失败。打开任务管理器,找到所有node.exe进程,全部结束掉,然后再重新执行启动命令。重置项目缓存
缓存损坏也可能引发这类问题,执行以下命令重置缓存:# npm用户 npm start -- --reset-cache # yarn用户 yarn start --reset-cache等缓存重置完成后,再运行
react-native run-android。检查Metro配置(可选)
如果你的项目修改过metro.config.js,可能存在配置错误导致服务器启动异常。可以先备份当前配置,然后替换成默认的配置试试:const {getDefaultConfig, mergeConfig} = require('@react-native/metro-config'); const config = {}; module.exports = mergeConfig(getDefaultConfig(__dirname), config);
另外,你还可以检查下Node.js版本是否和你的React Native版本兼容——比如RN 0.70及以上建议用Node 16+版本,版本不匹配也可能导致服务器启动异常。
内容的提问来源于stack exchange,提问作者Deepak

