如何配置Metro使其解析文件时不自动追加扩展名?
解决方案
问题根因
Metro 默认的可解析源扩展名列表未包含 .cjs 扩展名,因此无法识别已带完整后缀的 main.cjs 文件,才会持续在路径后追加其他预设扩展名尝试匹配,最终报文件不存在的错误。你之前在sourceExts中添加空字符串的操作对解决该问题无效,还可能干扰正常的解析逻辑。
修复步骤
修改你的metro.config.js文件,在resolver.sourceExts数组中添加cjs扩展名即可,修改后的完整配置如下:
module.exports = { transformer: { getTransformOptions: async () => ({ transform: { experimentalImportSupport: false, inlineRequires: true, }, }), }, resolver: { sourceExts: ['jsx', 'js', 'ts', 'tsx', 'cjs'], }, };
修改完成后清空缓存重启Metro服务即可,启动时可添加--reset-cache参数确保旧缓存不影响:npx react-native start --reset-cache
如果后续遇到 .mjs 后缀的ES模块文件出现同类解析问题,也可以将mjs同样加入sourceExts数组中适配。
内容的提问来源于stack exchange,提问作者Steven
相关产品推荐
相关产品推荐

