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

安装react-native-mmkv后启动应用Metro崩溃EPERM报错问题咨询

问题原因

这个EPERM错误是Windows环境下的典型文件锁冲突:

  • Metro启动时默认会递归扫描项目全目录的文件做依赖解析
  • react-native-mmkv包含C++原生代码,Android端编译时会生成随机命名的.tmp后缀临时so文件,这类文件生成阶段会被Gradle编译进程独占锁定
  • Metro扫描到被锁定的临时文件时,没有权限读取就会直接抛出崩溃。重启Metro的临时方案能生效,是因为重启时Gradle已经完成编译、临时文件被释放/清理,不存在锁冲突了。
永久修复方案

按优先级从高到低选择即可:

  • 方案1(最推荐,一劳永逸):配置Metro拦截规则,跳过原生构建中间目录扫描
    打开项目根目录的metro.config.js,修改配置如下:
    const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config');
    const exclusionList = require('metro-config/src/defaults/exclusionList');
    
    const config = {
      resolver: {
        blockList: exclusionList([
          // 拦截react-native-mmkv的Android编译中间产物
          /node_modules\/react-native-mmkv\/android\/build\/.*/,
          // 通用拦截规则,覆盖所有原生依赖的Android/iOS构建目录,避免其他库触发同类问题
          /node_modules\/.*\/android\/build\/.*/,
          /node_modules\/.*\/ios\/build\/.*/
        ])
      }
    };
    
    module.exports = mergeConfig(getDefaultConfig(__dirname), config);
    
    配置完成后执行npx react-native start --reset-cache清缓存重启Metro,后续正常启动应用就不会复现问题。
  • 方案2:升级依赖版本
    直接把react-native-mmkv升级到2.10.0及以上版本,官方已经在库内默认配置了对应的Metro忽略规则,不需要手动修改项目配置。
  • 方案3:调整启动顺序
    先单独执行原生编译流程,等Android端C++代码编译完成、所有临时so文件处理完毕后,再启动Metro服务,也能避开文件锁冲突,缺点是每次新增/更新带原生代码的依赖都要注意启动顺序,便利性不如前两个方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:09:12