Expo iOS构建失败:./Dashboard/Réclamations模块解析异常求助
问题分析与解决方案
核心原因
这是iOS构建环境的文件系统对Unicode重音字符的处理差异导致的:
- 本地macOS的APFS文件系统对带重音的文件名(比如
Réclamations)兼容性较好,且Android构建环境的Linux文件系统对Unicode文件名的处理逻辑不同,所以本地和Android构建都正常。 - 但EAS的iOS构建环境中,文件系统对重音字符的解析可能出现偏差,或者git在克隆代码时没有正确保留文件名的Unicode编码,导致Metro无法匹配到目标文件。
解决方案
方案1:移除文件名中的重音字符(最直接有效)
- 将
screens/Dashboard/下的Réclamations文件/文件夹重命名为无重音的Reclamations - 修改
screens/index.js中的导入语句:// 原语句 import Réclamations from "./Dashboard/Réclamations"; // 修改后 import Reclamations from "./Dashboard/Reclamations"; - 同步更新项目中所有引用该文件的代码,提交git后重新执行
eas build --platform ios
方案2:修复git的Unicode文件名处理配置
如果不想修改文件名,可以调整git配置确保文件名编码正确:
- 在本地项目目录执行:
git config core.quotepath false - 重新提交编码修正后的文件:
git add --renormalize . git commit -m "Fix Unicode filename encoding" git push - 重新触发EAS iOS构建
方案3:调整Metro的解析配置(备选)
在项目根目录的metro.config.js中,添加对重音字符文件名的解析支持(此方案可靠性略低):
const { getDefaultConfig } = require('expo/metro-config'); const config = getDefaultConfig(__dirname); config.resolver.resolveRequest = (context, moduleName, platform) => { // 针对重音字符做兼容匹配 if (moduleName.includes('Réclamations')) { moduleName = moduleName.replace('Réclamations', 'Réclamations'); } return context.resolveRequest(context, moduleName, platform); }; module.exports = config;
内容的提问来源于stack exchange,提问作者Ons Jannet
相关产品推荐
相关产品推荐

