升级至Expo 54后,npm运行expo-doctor成功但yarn执行失败求助
Expo 54下Yarn运行expo-doctor失败的原因
Yarn 1.x与Expo 54兼容性不匹配
Expo 54配套的expo-doctor工具,在依赖版本检查逻辑上更适配npm的包解析规则。你使用的Yarn 1.22.22属于旧版本,它的依赖解析机制(比如peer依赖处理、版本范围匹配)和npm存在差异,导致expo-doctor误判为依赖版本不符合要求。目前Expo官方对Yarn 1.x的兼容性支持已弱化,更偏向适配Yarn 2+和npm。yarn run与npx的执行逻辑差异
用yarn doctor执行脚本时,Yarn会优先加载本地node_modules里的expo-doctor,如果Yarn安装依赖时,某些间接依赖的版本和Expo 54要求有偏差,就会触发检查失败。但直接运行npx expo-doctor或者npm run doctor时,npx会拉取适配Expo 54的最新expo-doctor版本,或者npm的依赖解析更贴合Expo的要求,因此能顺利通过检查。Yarn 1.x的lock文件缓存问题
Yarn 1.x的yarn.lock会缓存旧版本依赖,即便你升级到Expo 54,这些缓存的依赖可能和新要求冲突。而npm的package-lock.json版本解析更精准,或者你使用npm时自动同步了依赖版本,所以未出现问题。
可行的临时解决方法
- 升级Yarn到2+版本(Yarn Berry),它的依赖解析逻辑和npm更接近,能更好适配Expo 54。
- 删除
yarn.lock和node_modules,重新执行yarn install后再运行yarn doctor,清除旧缓存可能解决误判问题。 - 修改package.json的脚本为:
"doctor": "yarn exec npx expo-doctor",强制用npx的逻辑执行检查。
内容的提问来源于stack exchange,提问作者David Carboni
相关产品推荐
相关产品推荐

