本文档概述了 React Native 代码库中使用的开发基础设施、构建流程和工具链。它解释了持续集成和发布管道如何工作,Hermes 如何集成和构建,并概述了测试基础设施。有关平台特定的实现细节,请参阅 Android 实现和 iOS 实现。有关代码生成的信息,请参阅 代码生成。
React Native 使用 GitHub Actions 进行持续集成,跨多个平台、架构和 JavaScript 引擎运行测试和验证更改。
来源
React Native 在多个维度上进行 CI 测试以确保兼容性
| 维度 | 选项 |
|---|---|
| 平台 | Android, iOS |
| 架构 | 新架构,旧架构 |
| JavaScript 引擎 | Hermes, JavaScriptCore (JSC) |
| 构建类型 | Debug, Release |
| 框架类型 | 静态库, 动态框架 (iOS) |
| Node.js 版本 | 18, 20, 22 |
来源
React Native 为其代码库的各个部分采用了不同的构建系统
来源
React Native 使用 Gradle 来构建 Android 组件。构建过程包括:
构建系统利用 Gradle 配置缓存来提高构建性能。
来源
对于 iOS,React Native 使用 CocoaPods 来管理依赖项。该系统处理:
来源
Hermes 是 React Native 的默认 JavaScript 引擎,作为构建流程的一部分进行构建和集成。
来源
Hermes 为多个平台和架构构建
| 平台 | 目标架构 | 构建系统 |
|---|---|---|
| iOS | arm64, x86_64 (模拟器) | CMake + Xcode |
| Android | arm64-v8a, armeabi-v7a, x86, x86_64 | CMake + Gradle |
| macOS | arm64, x86_64 | CMake + Xcode |
| Windows | x86_64 | CMake + Visual Studio |
| Linux | x86_64 | CMake |
构建过程首先为主机平台编译 HermesC 编译器,然后使用该编译器编译目标平台的 Hermes 字节码。
来源
React Native 采用跨所有平台的全面测试方法
JavaScript 测试使用 Jest 和 Node.js 在多个版本(18、20 和 22)上运行。
来源
iOS 测试包括:
来源
Android 测试包括:
来源
React Native 在 iOS 和 Android 平台上均使用 Maestro 进行 E2E 测试。这些测试用于验证 RNTester 应用和模板应用中的核心功能。
来源
React Native 通过一个结构化的流程管理多个发布渠道
来源
React Native 有几种发布类型
main 分支自动生成v0.X.Y-rc.Z,用于预发布测试v0.X.Y,用于生产环境发布流程包括构建所有平台工件、发布到 npm 和 Maven Central,以及创建一个包含生成变更日志的 GitHub 发布。
来源
对于本地 React Native 开发,需要以下工具
| 平台 | 所需工具 |
|---|---|
| 所有 | Node.js, yarn, Git |
| Android | Android Studio, JDK, Gradle |
| iOS | Xcode, CocoaPods, Ruby |
| Windows | Visual Studio, CMake |
来源
React Native 包含用于本地开发的开发中间件,包括
开发服务器通过提供对代码更改的实时反馈,从而能够加快开发过程中的迭代速度。
来源
packages/dev-middleware 引用React Native 使用内存映射方法加载 JavaScript 包,以实现对大型 JavaScript 文件的高效加载。
来源
React Native 代码库被组织成一个包含多个包的单体仓库
来源
这种组织方式使得可以在保持整体集成的同时,专注于特定组件的开发和测试。