Skip to content

解决 Expo 卡在欢迎界面问题

当升级至 Expo SDK 51+ 时,部分开发者会遇到应用启动后始终停留在 "Welcome to Expo" 界面的问题。该问题通常与自定义配置冲突有关,以下是已验证的解决方案:

核心原因

第三方 Babel 插件(如 react-native-dotenv)或自定义 babel.config.js 会破坏 Expo SDK 51+ 的默认行为,导致应用无法加载实际内容。

✅ 推荐解决方案

1. 清除冲突的 Babel 配置

完全移除或简化 babel.config.js 文件,仅保留基础预设:

javascript
module.exports = function (api) {
    api.cache(true);
    return {
        presets: ['babel-preset-expo'] // 仅保留官方预设
    };
};

2. 卸载冲突插件

bash
# 卸载第三方环境变量库
npm uninstall react-native-dotenv babel-plugin-transform-inline-environment-variables

# 清除缓存并重启
npx expo start --clear

🔧 备选修复方案

若问题仍存在,尝试:

bash
# 强制清理缓存(所有平台通用)
npx expo start -c

# Android 设备重新构建
npx expo run:android

环境变量新规范

从 Expo SDK 51 开始,直接使用原生环境变量支持:

  1. 所有环境变量需添加 EXPO_PUBLIC_ 前缀
    .env 示例:
    EXPO_PUBLIC_API_KEY=your_key_here
  2. 代码中直接调用:
    process.env.EXPO_PUBLIC_API_KEY

🧠 技术原理

Expo SDK 51+ 内置了 Babel 配置和环境变量处理机制:

  • 自定义 babel.config.js 会覆盖默认设置
  • react-native-dotenv 等插件与 expo-router 存在冲突
  • 旧版环境变量加载方式已被弃用

⚠️ 注意事项

  1. 不要降级 SDK
    多个案例证实降级(如退回 SDK 50)只是临时规避,非根本解决
  2. 彻底清理缓存
    每次配置变更后需执行 expo start -c
  3. 检查所有插件
    dotenv 外,类似 transform-inline-environment-variables 也需移除

官方说明参阅:Expo 环境变量文档,SDK 51 变更详见更新日志

通过上述步骤,应用将正确加载您的启动组件而非默认欢迎界面。此方案已在实际项目中验证,适用于 SDK 51-52 版本。