React Native Expo模块大小写报错 iOS端无法解析模块
问题根因
这个问题和用index.ts做统一模块导出没有直接关系,核心是macOS默认文件系统大小写不敏感的特性,叠加多层打包缓存、Git大小写跟踪默认配置共同导致:
- macOS默认APFS分区为大小写不敏感格式,手动修改文件夹大小写时,系统不会真正刷新文件路径索引,Expo/RN使用的Metro打包器、Watchman文件监听服务、babel-loader都会留存之前大写路径的模块记录
- Git默认在大小写不敏感文件系统上不跟踪纯大小写的文件名变更,之前执行
git revert后,Git仓库记录的路径和本地实际文件路径状态不一致,部分import语句保留了旧的大写路径引用,部分已经改为小写,就触发了同模块多大小写冲突的警告。Web端webpack容错性较高可以正常编译,iOS端Metro打包器对路径校验更严格,直接抛出模块无法解析的错误。 - Netlify部署用的Linux环境是大小写敏感文件系统,只要引用路径和实际文件大小写不匹配就会编译失败。
修复步骤
按顺序操作,不要跳步:
1. 统一所有引用路径的大小写
全局搜索项目内所有import语句,把所有指向你修改过名称的文件夹(比如CommonUI、Forms等)的引用,全部统一为和Git仓库存储一致的小写格式,重点检查各个index.ts导出文件内的相对路径,这类文件最容易漏改。
2. 彻底清除全链路缓存
先停掉所有正在运行的Expo服务、打包进程、iOS模拟器,再依次执行以下操作:
- 清除Watchman文件监听缓存:
watchman watch-del-all - 删除项目本地缓存文件夹:直接删除项目根目录下的
.expo文件夹、node_modules/.cache文件夹 - 清除依赖缓存并重装:
rm -rf node_modules # 对应你使用的包管理器删除对应锁文件,不要全删 rm -f package-lock.json # rm -f yarn.lock # rm -f pnpm-lock.yaml npm install # 替换为你用的包管理器安装命令,比如yarn、pnpm install - 清除iOS模拟器缓存:打开iOS模拟器,点击顶部菜单栏
Device-Erase All Content and Settings,清空模拟器内留存的旧构建包。 - 启动Expo时强制清Metro缓存:
expo start -c
3. 修改Git配置避免后续复发
执行命令开启Git的大小写敏感跟踪,防止以后改文件名大小写Git不识别的问题:
git config core.ignorecase false
配置完成后确认本地文件路径大小写和Git记录完全一致,正常提交推送后,Netlify部署的大小写错误也会同步解决。
相关说明
index.ts统一导出(桶导出)本身不会引发大小写问题,只是如果桶文件内的路径引用没同步改对大小写,会比分散引用更容易漏改,进而触发打包器的大小写冲突警告。- 如果执行完以上步骤还是有警告,全局搜代码里的大写路径关键词(比如
CommonUI),肯定还有漏改的引用,把所有大写引用全替换成小写即可。
内容的提问来源于stack exchange,提问作者seven
相关产品推荐
相关产品推荐

