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

Expo CLI项目无法解析@react-navigation/native模块,常规排查仍报错

@react-navigation/native 模块解析失败排查步骤

按照从易到难的顺序逐次排查即可解决问题:

  • 核实依赖安装的匹配性
    首先执行ls node_modules/@react-navigation/ 确认目录下是否存在native子目录。手动执行yarn install安装的@react-navigation/native版本可能和当前Expo SDK不兼容,甚至没有正确安装到项目本地。
    直接使用Expo内置的安装命令重新安装,会自动匹配和当前项目Expo SDK版本兼容的包:
    npx expo install @react-navigation/native @react-navigation/native-stack @react-navigation/bottom-tabs
    安装完成后再次确认node_modules下的@react-navigation目录结构,确保native包的package.json存在,main入口文件可正常读取。
  • 排查启动目录与路径异常
    报错日志里提到Metro会去../../../node_modules/@react-navigation 搜索模块,说明Metro的模块搜索路径出现了异常上跳。正常情况下Metro会优先从项目同级的node_modules查找,只有同级路径找不到时才会向上遍历父目录。
    需要确认:
    • 执行Expo启动命令的当前目录,是否和存在package.json、App.js的项目根目录完全一致,禁止在项目的子目录下启动服务
    • 打开App.js第5行的引入语句,确认引入路径是直接写的import * from '@react-navigation/native' ,没有多加多余的相对路径跳转前缀
  • 校验Metro配置文件
    打开项目根目录下的metro.config.js ,检查是否存在自定义的nodeModulesPaths 、extraNodeModules 配置,是否把@react-navigation的路径指向了不存在的目录。如果存在过自定义路径配置,临时还原为Expo默认配置:

    默认配置内容参考:

    const { getDefaultConfig } = require('expo/metro-config');
    module.exports = getDefaultConfig(__dirname);
    
  • 清除残留的环境缓存与进程
    基础的缓存清除操作执行完成后,还需要补充清理残留状态:
    • 单独清除目标包的yarn缓存:yarn cache clean @react-navigation/native ,避免安装时拉取到损坏的缓存包
    • 杀掉所有残留的Metro、watchman进程:先执行ps aux | grep -E 'metro|watchman' 找到残留进程的PID,执行kill -9 <PID> 强制终止,再重新执行watchman watch-del-all /home/jonteyh/React_Native/projects/MealsToGo 针对性清除当前项目的监听状态,无需全局清除所有watchman监听
    • 启动时强制重置缓存,执行npx expo start --clear ,避免和之前占用8081端口的旧Metro服务冲突
  • 检查目录文件权限
    项目运行在Linux环境下,很多时候之前用sudo权限安装依赖会导致node_modules目录的所有者是root用户,当前普通用户没有读取权限,Metro扫描时会直接判定模块不存在。
    执行命令把node_modules目录的权限调整为当前用户所有:
    sudo chown -R $USER:$USER node_modules

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 16:27:02