开发构建
Content
前情提要
我们认识了Expo的主要工具之一expo cli,并且用它创建新blank项目,在vscode中安装了expo tools插件来协助我们的开发,写了我们的第一个“Hello world” App应用,最后在模拟器和真机里用Expo Go运行和调试。
今天我们来看Expo Go之外的另一个选项,也就是更接近真实App开发环境的模式:开发构建 development build
简介
开发构建是一种包含 expo-dev-client 包的应用程序的调试版本。通过使用开发构建而不是 Expo Go,你可以完全控制原生运行时,因此可以安装任何原生库、修改任何项目配置或编写自己的原生代码。使用 Expo 开发构建,你正在构建自己的原生应用程序,而使用 Expo Go 则是在沙盒化的原生应用环境中运行项目。

当您运行开发构建时,它将如图所示,只是包含您的应用程序名称和图标,而不是只是程序名"Microfoam"。左右两边分别是iOS和Android画面,最边上是启动器 UI。中间两图是应用程序运行在开发构建中打开可自定义开发者菜单的样子。
expo-dev-client 包替换了 React Native 提供的默认应用内开发工具 UI,提供了更强大和可扩展的应用内 UI。它还添加了对网络调试的支持、对启动更新(如来自 PR 预览)的支持,以及添加了启动器 UI。
启动器 UI 使你无需重新构建应用程序二进制文件即可在开发服务器之间切换。这与持续原生生成(CNG: Continuous Native Generation)结合使用效果很好,因为你只需在修改应用程序中的原生代码时生成一个开发构建,然后你可以在不需要重新构建原生代码的情况下迭代 JavaScript 代码,直到下次需要修改它为止。即使没有 CNG,这种方法也非常适合有专门的原生工程师负责原生运行时和应用程序开发人员专门使用 React 的团队,可以实现与原生应用程序相当的迭代速度,而不会有任何折衷。
[!NOTE] 以上内容来自官方网站,以我的理解和实践,这里提到的工具
expo-dev-client其实不是构建必须的,构建的主要目的是在我们的模拟器或设备上建立一个独立的应用程序前端,由于脱离了Expo Go,它更可以安装任何原生库、修改任何项目配置或编写自己的原生代码。 实际上当我们在项目中运行了expo prebuild并expo run之后,它已经成功完成了开发构建。 我们仍然可以用上节课的开发工具来所见即所得地修改代码,实时调试。
创建构建的概念
如果你想要在本地创建开发构建,而不是在EAS上远程创建,你可以使用
npx expo run:android或者npx expo run:ios来创建本地构建,或者使用eas build --local。
开发构建可以使用EAS Build创建,或者在您的计算机上本地创建,如果您安装了Android Studio和Xcode。
在本指南中,您将找到有关使用EAS创建开发构建的信息,以及如何在模拟器/模拟器或物理设备上安装它,以继续开发您的应用程序。
[!NOTE] 按照官方指南的思路,我们现在就要进入EAS这个“大坑“了。 然而,笔者认为我们应该从独立开发者的角度,先把开发构建的基础再次巩固,通过实际操作,看看它是如何起作用的。 在eas之前,我们先引入另一个重要工具prebuild。
关于预构建Prebuild
在原生应用程序可以编译之前,必须生成原生源代码。Expo CLI提供了一个独特而强大的系统,称为预构建(prebuild),它根据四个因素为您的项目生成原生代码:
- 应用配置文件(app.json, app.config.js)。
- 传递给
npx expo prebuild命令的参数。 - 项目中安装的expo版本及其对应的预构建模板。
- 自动链接,在package.json中发现的原生模块。
用法
可以通过运行以下命令使用预构建:
npx expo prebuild
这将创建android和ios目录以运行您的React代码。如果您 手动修改了生成的目录,那么下次运行npx expo prebuild --clean时,您可能会丢失更改。相反,您应该创建配置插件,即是在预构建期间对原生项目进行修改的函数。
与EAS Build一起使用
如果您的项目不包含android和ios目录,EAS Build将在编译之前运行预构建来生成这些原生目录。这是使用npx create-expo-app创建的任何项目的默认行为。
对于具有android和ios目录的项目,默认情况下EAS Build不会运行预构建,以避免覆盖您对原生目录所做的任何更改。
如果您通过本地编译应用程序(运行npx expo prebuild,或npx expo run:android或npx expo run:ios)来排查问题,您仍然可以在构建过程中使用EAS Build与预构建来生成新的原生目录。在这种情况下,将android和ios目录添加到.gitignore或.easignore文件中:
+ android/
+ ios/