You need to enable JavaScript to run this app. react-native start正常,run-android时Metro崩溃,Bare Workflow新项目复现
优惠活动
大模型
产品
解决方案
定价
更多

react-native start正常,run-android时Metro崩溃,Bare Workflow新项目复现

Windows 10下Expo Bare Workflow Android项目运行异常解决方案

故障根因

你遇到的Metro随机崩溃、createDebugExpoConfig找不到app.config、EPERM权限报错、App提示无法加载脚本等问题,本质是直接使用裸React Native CLI命令操作Expo Bare项目时,缺失了Expo CLI自带的Windows系统兼容逻辑、路径校准逻辑、Metro扫描隔离逻辑,和node_modules损坏、Gradle缓存的关系很小,所以常规的重装依赖、清理Gradle缓存操作无法稳定解决问题。之前偶尔出现“重启Metro就能用”的情况,是因为Windows下的文件占用冲突是随机触发的,并非流程完全正确。

可落地的解决步骤

1. 替换原有命令流程,避免路径和配置缺失问题

不要分开执行裸的react-native start和react-native run-android,全程使用Expo CLI的命令完成操作:

  • 启动Metro服务统一用npx expo start --dev-client,这个命令会自动加载Expo定制的Metro配置,不会无权限遍历node_modules下的expo相关模块目录,从根源减少EPERM报错
  • 执行Android构建安装统一用npx expo run:android,这个命令会自动校准项目根目录路径,不会出现Gradle脚本在错误路径下找不到app.config文件的问题

2. 配置Metro兼容Windows的文件扫描规则

Windows系统下并行运行的Metro进程和Gradle构建进程会同时访问node_modules、Expo临时目录下的文件,随机触发文件句柄占用、EPERM权限错误,导致Metro直接崩溃。打开项目根目录下的metro.config.js,补充以下配置:

const { getDefaultConfig } = require('expo/metro-config');
const config = getDefaultConfig(__dirname);

// 阻止Metro扫描Gradle、Expo自动生成的临时目录,避免和Gradle进程的文件占用冲突
config.resolver.blockList = [
  ...config.resolver.blockList,
  /\/(android\/\.gradle|expo\/node_modules\/.cache)\//
];

// 锁定Metro的监听目录为项目根目录,避免越权遍历其他路径
config.watchFolders = [__dirname];

module.exports = config;

3. 解决系统级的文件占用问题

  • 将项目根目录加入Windows Defender实时扫描的排除项,关闭第三方同步工具(OneDrive、云盘客户端)对项目目录的自动同步,避免这些后台进程随机锁定项目目录下的文件
  • 每次构建前如果遇到端口占用、残留进程问题,执行npx kill-port 8081清理残留的Metro进程,不要在终端残留旧的Metro进程的情况下直接执行构建命令
  • 构建安装前完全卸载模拟器/物理设备上的旧版本App,不要覆盖安装,避免旧版本App内置的Metro服务器地址和当前启动的服务不匹配,导致App打开后无法加载脚本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 07:15:04