ReactNative开发项目的原理及实现社区已有许多的资料可以参考,本文主要是记录一下我在开发一个轻量级APP的过程中产生的思考及遇到的问题。
环境搭建
android和ios的开发环境搭建参考官网
项目搭建
-
初始化项目可以使用react-native-cli或者使用expo-cli,推荐使用expo-cli。expo-cli提供的项目模板更全面,可以选择是否接入expo工作流,可以选择是否使用TypeScript。
-
根据需要是否接入jest、eslint、prettier等,推荐配置自动格式化工具来维护代码格式一致性。
npm install husky lint-staged prettier- 在package.json文件中增加配置
"husky": { "hooks": { "pre-commit": "lint-staged" } }, "lint-staged": { "src/**/*.{js,jsx,json,md}": [ "prettier --write", "git add" ], "*.{js,jsx,json,md}": [ "prettier --write", "git add" ] } -
目录结构
├── android // Android项目目录,包含了使用AndroidStudio开发项目的环境配置文件 ├── ios // iOS项目目录,包含了XCode的环境 ├── node_modules // 基于Node.js文件依赖系统产生的相关依赖和第三方库 ├── src // 项目代码 ├── apis // 接口请求 ├── assets // 静态资源 ├── components // 公共组件 ├── constants // 公共常量 ├── navigation // 导航相关 ├── pages // 页面级组件 ├── store // redux相关 ├── utils // 工具 └── App.js // 根组件 ├── .babelrc // Babel配置文件,在.babelrc配置文件中,主要是对预设(presets)和插件(plugins)进行配置,因此不同的转译器作用不同的配置项 ├── .buckconfig // Buck的配置文件,buck是Facebook开源的高效构建系统 ├── .gitattributes // git配置文件,指定非文本文件的对比合并方式 ├── .gitignore // git配置文件,用于忽略你不想提交到Git上的文件 ├── .prettierrc // prettier配置文件,用于代码格式化 ├── .watchmanconfig // watchman的配置文件,watchman用于监控文件变化,辅助实现工程修改信息 ├── app.json // 应用配置文件 ├── index.js // iOS或Android的入口 ├── package.json // 项目基本信息以及依赖信息 ├── README.md // README └── yarn.lock // yarn install生成的文件,记录当前npm package的信息 -
code-push热更新
-
code-push环境部署及热更新操作请参考code-push-cli
-
code-push集成到代码里面请参考react-native-code-push
自动检测更新代码可以利用CodePush的高阶组件,简单配置如下:
const CodePushOptions = { updateDialog: { appendReleaseDescription: true, descriptionPrefix: '', mandatoryContinueButtonLabel: '立即更新', mandatoryUpdateMessage: '', optionalIgnoreButtonLabel: '稍后', optionalInstallButtonLabel: '下载', optionalUpdateMessage: '', title: '发现新版本', }, } class App extends PureComponent { codePushDownloadDidProgress(progress) { const percent = ((progress.receivedBytes / progress.totalBytes) * 100).toFixed(2) - 0 Toast.info(`已下载:${percent}%`) } render() { return ( <AntdProvider> <ReduxProvider store={store}> <AppNavigator ref={ref => NavigationService.setTopLevelNavigator(ref)} /> </ReduxProvider> </AntdProvider> ) } } export default CodePush(CodePushOptions)(App)
-
-
APP多环境部署
APP环境最好区分开发环境,测试环境,生产环境,不同的环境配置不同的应用图标、热更新deploymentKey等,具体配置参考Multi-Deployment Testing
- android关键配置app/build.gradle文件中的buildTypes字段
- ios根据文档配置xcode
-
本地运行
下载npm依赖然后运行run-android或者run-ios,注意:初次运行ios项目时需要进入ios目录下运行pod install下载ios依赖
依赖推荐
- UI库:推荐使用native-base
- 图表库:图表一般利用WebView + Web图表库这样比较灵活
- 导航:react-navigation