开发构建简介
编辑页面
为什么使用开发构建以及如何开始。
For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.
开发构建是我们用来指代包含 expo-dev-client 库的应用“调试”构建的术语。该库为内置的 React Native 开发工具增加了额外能力,例如支持检查网络请求,以及一个“启动器”界面,让你可以在不同的开发服务器之间切换(例如在你自己机器上运行的服务器和队友机器上的服务器之间切换),以及在应用的不同部署之间切换(例如使用 EAS Update 发布的更新)。
Expo Go 与开发构建的区别
Expo Go 是一个面向学生和学习者的游乐场应用,帮助他们快速入门。它内置了一组固定的原生库,因此你可以编写 JavaScript 代码并立即看到变化,而无需自己构建原生应用。开发构建则是一个功能完整的开发环境,用于处理生产级的 Expo 应用。
原生应用与 JavaScript 包
原生应用是你安装到设备上的内容。Expo Go 是一个预构建的原生应用,像游乐场一样工作——安装后不能再更改。要添加新的原生库或更改应用名称和图标等内容,你需要构建自己的原生应用(即开发构建)。
**JavaScript 包(npx expo start)**中包含的是应用的 UI 代码和业务逻辑。在生产应用中,会有一个随应用一起发布的 main.js 包。在开发中,这个 JS 包会从你的本地机器进行实时重新加载。React Native 的主要作用是为 JavaScript 代码提供访问原生 API(Image、Camera、Notifications 等)的方法。不过,只有已经打包进 原生应用 的 API 和库才能使用。

在这个教程视频中,Beto 解释了它们各自是什么,以及何时选择开发构建。
为什么要使用开发构建(也就是在 Expo Go 中你 不能 做什么,以及为什么不能)
Expo Go 是一个供学生和学习者理解 React Native 基础知识的游乐场。它功能受限,并不适合构建生产级项目,因此大多数应用会转向使用开发构建。了解在 Expo Go 中究竟什么是 不可能 的,以及 为什么 不可能,会很有帮助,这样你就可以在何时以及为何做出这一选择时做出明智决定。
使用 Expo Go 中没有的原生代码库
以 react-native-webview 为例,这是一个包含原生代码的库,但 已包含在 Expo Go 中。当你在项目中运行 npx expo install react-native-webview 命令时,它会把该库安装到你的 node_modules 目录中,其中既包含 JS 代码,也包含原生代码。但你正在构建的 JS 包 只 会使用 JS 代码。然后,你的 JS 包会被上传到 Expo Go,它会与已经随应用一起打包的原生代码进行交互。
相反,当你尝试使用一个未包含的库时,例如 react-native-firebase,你可以使用 JS 代码并将新的包热重载到 Expo Go 中,但它会立即报错,因为 JS 代码试图调用 Expo Go 中不存在的 React Native Firebase 包的原生代码。除非原生代码已经包含在上传到应用商店的那个包中,否则无法把原生代码放进 Expo Go 应用里。
测试应用图标、名称、启动屏幕的更改
如果你只在 Expo Go 中开发应用,你可以构建一个商店版本,它会使用你提供的值和图片;只是无法在 Expo Go 中对其进行测试。
这些原生资源会随原生包一起发布,并且在应用安装后是不可变的。Expo Go 应用确实会显示一个启动屏幕,它是你应用图标显示在纯色背景上。这是一个仅用于开发的模拟,用来查看启动屏幕大致会是什么样子。不过它是有限制的,例如,你无法测试 SplashScreen.setOptions 来给启动屏幕添加动画。
远程推送通知
虽然 应用内通知 在 Expo Go 中可用,但远程推送通知(也就是从服务器向应用发送推送通知)不可用。这是因为推送通知服务应该与你自己的推送通知证书绑定;虽然可以让它在 Expo Go 中工作,但这通常会给生产构建带来困惑。建议在开发构建中测试远程推送通知,这样你可以确保开发和生产环境中的行为一致。
实现 App/通用链接
Android App Links 和 iOS Universal Links 都要求原生应用与网站之间建立双向关联。特别是,它要求原生应用包含所链接网站的 URL。由于前面提到的原生代码不可变性,这在 Expo Go 中是不可能的。
打开使用较旧 SDK 的项目(仅 iOS 设备)
Expo Go 同一时间只能支持一个 SDK 版本。当发布新的 SDK 版本时,Expo Go 会更新以支持较新的版本,而这将成为唯一可从商店安装的 Expo Go 版本。
如果你是在 Android 设备、Android 模拟器或 iOS 模拟器上开发,可以下载并安装兼容版本的 Expo Go。唯一无法做到这一点的平台是 iPhone 设备,因为 Apple 不支持通过侧载安装旧版本应用。
了解如何将现有的 Expo Go 项目迁移为使用开发构建
如何在本地机器上构建开发客户端
如何在 EAS 上构建开发客户端