「原生 + RN 混合工程」一条命令启动全攻略:解密 react-native.config.js

Hybrid 开发模式越来越常见:原生 Android / iOS + React Native 模块混合开发。

但是,很多人遇到一个小坑:

我想直接在 Hybrid 工程里执行 yarn android,像纯 RN 工程一样一键跑起来,结果报错!

为什么会这样?React Native CLI 默认只认 ./android、./ios,根本不知道你的原生主工程在哪。

今天,我们就来揭秘 react-native.config.js,教你轻松解决这个问题,让 Hybrid 工程也能一条命令启动。


一、Hybrid 工程典型结构

先来看一个常见目录:

bash 复制代码
/HybridApp
   ├── /appA                # 原生 Android 工程(主工程)
   │     └── build.gradle
   │
   ├── /rnmodule            # React Native 模块
   │     ├── android/       # RN 的 Android library
   │     └── index.js
   │
   ├── package.json
   └── react-native.config.js

如果直接 yarn android,CLI 会去找 ./android, 但我们的 真正入口在 appA ------ 所以它当然会失败。


二、解决方案:配置 react-native.config.js

在根目录加一个配置文件:

js 复制代码
// react-native.config.js
module.exports = {
  project: {
    android: {
      sourceDir: './appA',   // 指定原生主工程路径
    },
  },
  assets: [
    // 如果有字体、图片需要自动拷贝,可以在这里配置
    // 'rnmodule/assets/fonts',
  ],
};

这样,执行 yarn android 时,CLI 会自动进入 ./appA,执行:

bash 复制代码
cd appA && ./gradlew installDebug

APK 就能顺利安装并启动了 🚀

同时,Debug 模式下 JSBundle 会走 Metro,方便热更新调试。


三、react-native.config.js 的历史演进

  • RN 0.59 及以前 没有 react-native.config.js,CLI 默认死板地只认 ./android./ios。 要改路径只能硬改 CLI 源码。

  • RN 0.60 引入 react-native.config.js 正式登场,替代早期的 rnpm。 支持配置:dependencies、assets、project.android.sourceDir、project.ios.sourceDir。

  • RN 0.62+ react-native linkrun-androidrun-ios 全部基于这个配置。

  • RN 0.70+ CLI 拆分成 @react-native/cli,但 react-native.config.js 依然是推荐方式。

👉 也就是说,从 RN 0.60 起就能用了,一直到今天都稳定可用。


四、CLI 内部调用链

那 CLI 到底是怎么用这个配置的呢? 以 yarn android 为例,调用链大致是这样:

less 复制代码
yarn android
   ↓
react-native/cli.js
   ↓
@react-native/cli (或 @react-native-community/cli)
   ↓
loadConfig(projectRoot)
   └── 读取 react-native.config.js
   ↓
run-android/index.js
   └── const sourceDir = config.project.android.sourceDir || 'android'
   ↓
cd ${sourceDir} && ./gradlew installDebug

一句话总结:

👉 CLI 每次执行命令时,都会去读取 react-native.config.js, 然后用里面的 sourceDir 来决定去哪执行 gradlew


五、最终效果

配置好后,Hybrid 工程就能像纯 RN 工程一样用了:

bash 复制代码
yarn start    # 启动 Metro
yarn android  # 编译 appA 原生工程并安装到手机

再也不用手动 cd appA && ./gradlew installDebug 了,舒服~


🎯 总结

  • Hybrid 工程默认 yarn android 会失败,因为 CLI 不知道主工程在哪。
  • react-native.config.js 里配置 project.android.sourceDir,就能解决。
  • 这个机制从 RN 0.60 起支持,到现在依然是官方推荐做法。
  • CLI 调用链:命令行 → 读取配置 → 确定工程目录 → 调用 gradlew

小结一句话:配置 react-native.config.js,让 Hybrid 工程也能"一条命令启动",从此告别手动切换目录和命令的烦恼。

相关推荐
齊家治國平天下1 小时前
AAOS 电源管理深度解析:休眠/唤醒/功耗优化
android·车载系统·aaos·aosp·电源管理·休眠唤醒·carpowermanager
Xzaveir2 小时前
企业号码展示不可观测怎么办:状态机、拨测事件与异常回放
android·人工智能
2501_916007472 小时前
iOS和macOS应用程序性能分析和优化工具使用综合指南
android·macos·ios·小程序·uni-app·iphone·webview
黄林晴3 小时前
Nearby Connections 重大变更:不再自动开启 Wi-Fi / 蓝牙,适配指南
android
恋猫de小郭3 小时前
Flutter 全新真 3D 实现,用 flutter_scene 能开发一个「我的世界」
android·前端·flutter
HLC++16 小时前
Linux的进程间通信
android·linux·服务器
爱笑鱼19 小时前
Binder(二):AIDL 生成的 Proxy、Stub 和 Parcel 到底在做什么?
android
爱笑鱼20 小时前
Binder(一):一次方法调用,究竟怎样跨进程执行?
android
壮哥_icon21 小时前
【Android 系统开发】使用 BAT 脚本高效自动化管理 /system/priv-app/ 系统应用(安装与卸载)
android·运维·自动化
用户69371750013841 天前
Claude Code终端日志Token占用实测:一个过滤器砍掉60%-90%
android·前端·后端