Expo SDK 55 依赖版本与新模板不同,为何检查仍提示已是最新?
结论
npx expo install --check 提示 Dependencies are up to date,表示它没有在检查范围内发现需要校正的依赖版本。这个命令不会逐项比较现有项目和最新项目模板的 package.json,也不保证所有第三方包都已更新到最新版本。Expo CLI 官方文档
如果继续使用 SDK 55,可以先在 55.x 范围内更新 expo,再执行 npx expo install --fix 校正 Expo 管理的依赖。React Navigation 等第三方依赖需要单独更新,也没有一个命令能保证所有包都达到“最新且与整个应用兼容”。
为什么模板版本不同,检查仍然通过?
Expo 检查的是已知版本组合
Expo CLI 根据当前 SDK 的已知兼容版本信息检查一组受管理的包,不会检查 npm 上的所有包。--fix 用于修正检查发现的版本问题,也不会自动将整个项目的依赖清单改成新模板的样子。Expo CLI 依赖安装说明
SDK 55 官方的 bundledNativeModules.json 中列有 expo-router、react-native-screens、react-native-reanimated 等包,但没有题中的 @react-navigation/* 包。因此,这些包的声明版本落后于模板,并不意味着检查命令会提示更新。SDK 55 版本映射
项目也可以通过 expo.install.exclude 排除某些包的版本检查。如果某个本应被检查的包没有提示,可以查看这项配置。Expo package.json 配置
package.json 声明不等于实际安装版本
题中比较的是依赖的版本范围。例如:
"@react-navigation/bottom-tabs": "^7.7.3"
^7.7.3 允许安装 >=7.7.3 <8.0.0 范围内的正式版本,7.15.5 也在其中。旧项目保留了较低的范围下限,并不代表实际安装的仍是 7.7.3;实际版本还取决于锁文件和依赖解析结果。npm update 的版本范围说明
以 npm 项目为例,可以先查看实际安装情况:
npm ls expo @react-navigation/bottom-tabs @react-navigation/elements @react-navigation/native @react-navigation/drawer
npm outdated
npm outdated 可以用来发现更新,但不能代替 Expo 兼容性检查。仅凭题中的两个 package.json 片段,无法确定现有项目实际安装的导航库版本。
如何在 SDK 55 内更新依赖?
以下命令以 npm 为例。操作前请保存当前改动,并继续使用项目已有的包管理器和锁文件。
1. 更新 expo,再校正受管理的依赖
在项目根目录执行:
npm install expo@^55.0.0
npx expo install --fix
^55.0.0 将 expo 限制在 55.x,不会升级到 SDK 56。先更新 expo 再校正依赖,符合 Expo 官方的更新顺序;此处将目标版本范围限定为 SDK 55。Expo 更新指南
题中两个项目的 expo 声明都是 ~55.0.9,但声明相同不代表实际安装版本相同,也不能证明当前没有新的 55.x 版本发布。
2. 单独更新 React Navigation 等第三方依赖
如果希望在现有声明范围内更新题中的导航库,可以执行:
npm update @react-navigation/bottom-tabs @react-navigation/drawer @react-navigation/elements @react-navigation/native
npm update 会遵守版本范围和依赖约束;默认情况下,它不一定会修改 package.json 中的范围声明。如果更新后仍看到 ^7.7.3,可以检查锁文件或使用 npm ls,确认实际版本是否变化。npm update 官方说明
如果想尝试在声明范围内更新所有依赖,也可以使用:
npm update
这个命令不会保证所有包都与 SDK 55 兼容,也不会更新被精确版本固定的依赖。第三方包仍需核对 peerDependencies、发布说明和项目使用的 API。
3. 若要求与题中的模板声明一致,显式修改范围
如果要对齐题中列出的三个导航包声明,可以执行:
npm install "@react-navigation/bottom-tabs@^7.15.5" "@react-navigation/elements@^2.9.10" "@react-navigation/native@^7.1.33"
这会设置相应的版本范围,最终安装的版本不一定恰好是范围下限。这些版本来自问题提供的模板片段,不代表执行时的最新版本。
@react-navigation/drawer 没有出现在给出的模板片段中,无法据此确定应对齐的版本。需要结合项目的使用情况和导航库之间的依赖约束单独选择。
更新后如何确认?
执行:
npx expo install --check
npx expo-doctor
npm ls @react-navigation/bottom-tabs @react-navigation/elements @react-navigation/native @react-navigation/drawer
expo-doctor 可以进一步检查项目配置和常见依赖问题。即使检查通过,仍需测试应用。Expo Doctor 说明
测试时应重点验证页面跳转、Tab、Drawer、返回行为,以及项目使用的原生功能。如果更新涉及原生模块,使用自定义 development build 的项目通常还需要重新构建。
保留并提交更新后的锁文件。可以用新模板作对照,并结合 SDK 推荐版本、第三方依赖约束和实际运行结果,判断现有项目的更新是否完成。
备注:内容仅供参考。
