You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将React Native裸项目转为Expo项目?实操遇阻求助

裸React Native项目迁移到Expo(PC端开发安卓)

你的问题核心是裸RN项目直接复制到Expo项目会因为依赖兼容性、原生配置差异导致错误,以下是分步解决的正确迁移流程:

一、先梳理依赖兼容性(关键!)

你的项目里很多裸RN依赖无法直接在Expo Go中运行,必须替换为Expo官方支持的对应包,核心替换清单:

原裸RN依赖Expo替代方案
@react-native-firebase/*expo-firebase-*(如expo-firebase-app、expo-firebase-auth等)
react-native-cameraexpo-camera
react-native-image-crop-pickerexpo-image-picker + expo-image-manipulator
react-native-configexpo-constants(或配合expo-build-properties管理环境变量)
react-native-linear-gradientexpo-linear-gradient
react-native-mapsexpo-maps
react-native-splash-screenexpo-splash-screen
react-native-fast-imageexpo-image
react-native-permissions对应Expo包自带权限(如expo-camera、expo-image-picker内置权限申请)
react-native-push-notificationexpo-notifications
@react-native-community/geolocationexpo-location
react-native-fsexpo-file-system
react-native-shareexpo-sharing

注:iOS专属依赖(如@invertase/react-native-apple-authentication)在PC开发安卓时可直接忽略,无需安装

二、分步迁移流程

1. 初始化适配的Expo项目

根据原项目是否使用TypeScript,选择对应模板:

# TypeScript项目(你的项目包含ts依赖)
expo init expo-migrated-project --template blank-typescript
# JavaScript项目
expo init expo-migrated-project --template blank

2. 替换并安装兼容依赖

删除新项目默认的package.json依赖,将原项目依赖替换为上述Expo替代包后安装,同时确保版本与当前Expo SDK兼容。例如:

# 安装核心Expo替代依赖
npm install expo-camera expo-firebase-app expo-firebase-auth expo-image-picker expo-image-manipulator expo-linear-gradient expo-maps expo-splash-screen expo-image expo-notifications expo-location expo-file-system expo-sharing

# 保留Expo支持的原依赖(如导航、Redux等)
npm install @react-navigation/native @react-navigation/stack react-native-vector-icons react-redux redux-persist

3. 迁移代码与配置

  • 复制src文件夹:直接将原项目src/复制到新项目根目录。
  • 修改入口文件:复制原项目App内容后,批量替换导入语句,比如:
    // 原导入
    import Camera from 'react-native-camera';
    // 替换为
    import { Camera } from 'expo-camera';
    
  • Firebase与环境配置:
    • 无需复制google-services.json到android文件夹,改为在app.json的expo.plugins中配置:
      {
        "expo": {
          "plugins": [
            [
              "expo-firebase-app",
              {
                "googleServicesFile": "./src/config/env/dev/google-services.json"
              }
            ]
          ]
        }
      }
      
    • 环境变量改用expo-constants读取,或在eas.json中配置不同环境的变量。
  • 权限配置:原项目的权限声明移到app.json的expo.permissions中,比如:
    {
      "expo": {
        "permissions": [
          "CAMERA",
          "MEDIA_LIBRARY",
          "MEDIA_LIBRARY_ADD_ONLY",
          "LOCATION"
        ]
      }
    }
    

4. 适配API差异

部分Expo包的API与原裸RN包不同,需要调整代码逻辑:

  • 比如expo-image-picker的图片选择逻辑和react-native-image-crop-picker不同,需参考Expo文档修改。
  • expo-notifications的推送配置逻辑与react-native-push-notification差异较大,需重新适配。

5. 运行项目

  • 基础包可直接用Expo Go运行:
    npx expo start
    
  • 若使用了需要原生构建的包(如expo-firebase),需构建自定义开发客户端:
    npx expo run:android
    

三、常见问题排查

  • 版本冲突:执行npx expo doctor检查依赖兼容性,根据提示修复版本问题。
  • 原生模块报错:确认所有依赖均为Expo支持的包,若有无法替代的裸RN模块,需使用EAS构建自定义客户端。
  • 配置不生效:检查app.json的Expo配置是否正确,尤其是插件、权限部分。

内容的提问来源于stack exchange,提问作者Archie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 12:23:12