Github Actions 用于 React Native 项目部署教程
本教程将指导您如何理解和操作名为 Github-Actions-React-Native
的开源项目。该项目演示了如何结合 Github Actions 实现 React Native 应用的自动化构建流程。我们将探讨其基本结构、关键入口文件以及重要配置文件,帮助您快速上手。
1. 项目目录结构及介绍
Github-Actions-React-Native
的目录结构遵循了典型的 React Native 项目布局,具有以下主要部分:
- android 和 ios: 分别包含了安卓和iOS平台的原生代码及配置文件。
- node_modules: 自动安装的npm依赖包存放位置。
- src: 项目的主要源代码所在目录,通常包含业务逻辑和组件定义。
- index.js 或 index.android.js, index.ios.js: 入口文件,决定应用启动时加载的第一个React组件。
- app.json: 反应项目的全局配置信息。
- .gitignore: 指定Git在提交时不包括哪些文件或目录。
- package.json: 包含项目元数据和依赖项列表,也是运行脚本命令的中心点。
- .github/workflows: 这是重点区域,包含了GitHub Actions的工作流定义文件,用于自动化任务。
2. 项目启动文件介绍
在React Native项目中,通常有两个启动文件需要注意:
- index.js: 这是默认的单一入口点,在一些新版本或设定为通用入口的项目里,所有应用启动都会从这个文件开始。它负责引入根组件并启动React Native应用。
如果项目区分平台,则可能有:
- index.android.js 和 index.ios.js: 在较旧或者特定配置的项目中,分别对安卓和iOS提供独立的入口逻辑。不过,现代实践更倾向统一入口
index.js
,通过条件编译或环境变量来处理平台差异。
3. 项目的配置文件介绍
a. app.json
app.json
是React Native中的一个核心配置文件,用于设置应用的基本信息和开发选项,比如应用的名称、图标、 splash 屏幕、以及是否启用Jest等。示例字段可能包括:
{
"expo": {
"name": "YourAppName",
"slug": "your-app-slug",
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/icon.png",
"splash": {
"image": "./assets/splash.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
},
"updates": {
"fallbackToCacheTimeout": 0
},
"assetBundlePatterns": ["**/*"],
"ios": {
"supportsTablet": true
},
"android": {
"package": "com.example.yourapp"
},
"web": {
"build": "react-scripts build"
}
}
}
b. Github Actions 配置文件
在 .github/workflows
目录下的 YAML 文件(如 main.yml
)是Github Actions的工作流定义。它描述了当特定事件触发时,如代码推送,应当执行的任务序列。例如,自动构建和发布Android APK或进行测试。
name: React Native Android Build
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install Dependencies
run: npm install
- name: Build Android
run: cd android && ./gradlew assembleRelease
- name: Upload Artifact
uses: actions/upload-artifact@v2
with:
name: app-release
path: android/app/build/outputs/apk/release/app-release.apk
以上是对 Github-Actions-React-Native
项目的基本解析,提供了必要的启动和配置理解,以便开发者能够快速融入项目并利用Github Actions进行高效的应用部署。