Expo Snack使用firebase@9.5.0时依赖解析失败问题如何解决
报错详情
package.json (7:5)
Failed to resolve dependency 'firebase@9.5.0' (Can't resolve '' in '/tmp/snackager/snackager/buildStatus/1/firebase@9.5.0-ios,android,web/package')
产生原因
- Expo Snack的依赖预构建服务(Snackager)未缓存
firebase@9.5.0这个特定版本:Snack仅会对高频使用的依赖版本做提前编译适配,冷门或存在兼容问题的版本不会加入缓存列表,拉取时就会出现解析失败的问题。 firebase@9.5.0本身存在ESM模块导出兼容问题:该版本的package.json入口字段配置不符合Snack打包器的解析规则,导致打包器无法找到正确的包入口文件。- 你当前使用的Expo SDK版本和
firebase@9.5.0不兼容:高于47版本的Expo SDK移除了对旧版firebase v9部分适配逻辑的支持,依赖解析时就会触发路径找不到的报错。
处理方案
- 优先更换firebase适配版本:将package.json中的firebase依赖修改为
firebase@9.23.0或firebase@10.1.0,这两个版本均已加入Snack的预编译缓存列表,无需额外配置即可正常解析。 - 切换Expo SDK版本:若必须使用v9.5.0版本的firebase,可在Snack右侧设置面板将SDK版本降级到45~46区间,这两个版本对firebase v9全系列的适配兼容性更好。
- 切换到本地Expo裸项目开发:Snack的依赖限制较多,本地初始化Expo项目后安装
firebase@9.5.0不会受预构建缓存规则限制,可正常使用。 - 调整导入语法:使用按需导入的方式引入firebase子模块,避免全量导入,比如使用
import { initializeApp } from 'firebase/app'替代全量导入语法,降低打包器的解析负担。
内容的提问来源于stack exchange,提问作者kmfonagy
相关产品推荐
相关产品推荐

