从 React Native CLI 迁移到 Expo CLI
编辑页面
了解如何将任何 React Native 项目从 React Native CLI(@react-native-community/cli)迁移到 Expo CLI。
For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.
要从 React Native CLI(npx @react-native-community/cli@latest init)迁移到 Expo CLI,你需要安装 expo 包,其中包含 Expo Modules API 和 Expo CLI。本指南涵盖安装步骤、使用 Expo CLI 的优势,以及迁移到 Expo CLI 后如何编译和运行你的项目。
强烈建议在使用其他 Expo 工具时使用 Expo CLI。许多工具都需要它,例如 EAS Update、Expo Router 和 expo-dev-client;如果没有它,其他功能也可能无法正常工作。
安装 expo 包
在大多数情况下,只需在项目目录中执行以下命令来安装该包即可:
- npx install-expo-modules@latest有关详细的安装指南,请参阅安装 Expo 模块。
安装expo包后,你需要配置项目以使用 Expo CLI。这包括设置 Metro 配置、Babel 预设以及原生项目配置。完整设置说明请参阅为 Android 和 iOS 打包配置 Expo CLI部分。
为什么使用 Expo CLI 而不是 React Native CLI
与 @react-native-community/cli 中类似的命令相比,Expo CLI 命令提供了多项优势,包括:
- 按下 j 即可立即使用 Hermes 调试器。
- 调试器自带 React Native DevTools。
- 支持使用
expo prebuild进行 Continuous Native Generation (CNG) 用于升级、白标化、轻松设置第三方包,以及通过减少代码表面积来提高代码库可维护性。 - 支持通过
expo-router进行基于文件的路由。- 开发环境中的 异步打包。
- 内置 环境变量支持 和 .env 文件集成。
- 可直接在终端中查看原生日志,与 JavaScript 日志并列显示。
- 使用 Expo CLI 专为 React Native 应用构建的
xcpretty风格工具后,原生构建日志格式更佳。例如,在编译 Pod 时,你可以看到它是由哪个 Node 模块引入的。 - 一流的 TypeScript 支持。
- 内置支持 tsconfig.json 别名中的
paths和baseUrl,已集成到 Metro 中。 - 通过 Metro 支持 Web 支持。对 React Native Web 提供完整类型支持。
- 支持现代 CSS,包括 Tailwind、PostCSS、CSS Modules、SASS 等。
- 使用 Expo Router 和 Metro web 进行静态站点生成。
- 开箱即用地支持 monorepo。
- 支持 Expo 工具,例如
expo-dev-client、Expo Updates 协议 和 EAS Update。 - 使用
npx expo run:ios时会自动执行pod install。 npx expo install会为知名包选择兼容的依赖版本。- 运行
npx expo run:[android|ios]和npx expo start时会自动检测端口。如果默认端口上已有其他应用在运行,则会使用其他端口。 - 在交互式提示中使用 Shift + a 或 Shift + i 可快速选择启动 Android 或 iOS 设备。
- 内置通过 ngrok 隧道 提供你的应用。
- 可使用任意入口 JavaScript 文件在任意端口上进行开发。
对于大多数面向 Android、iOS 和/或 Web 的 React Native 项目,我们推荐使用 Expo CLI。它目前尚未内置支持最常见的树外平台,例如 Windows 和 macOS。如果你要为这些平台构建,可以对受支持的平台使用 Expo CLI,而对其他平台使用 @react-native-community/cli。
编译并运行你的应用
安装 expo 包后,你可以使用以下命令,它们可替代 npx react-native run-android 和 npx react-native run-ios:
# 针对 Android- npx expo run:android# 针对 iOS- npx expo run:ios构建项目时,你可以使用 --device 标志选择设备或模拟器。这同样适用于任何连接到电脑的 iOS 设备。
独立启动打包器
npx expo run:[android|ios] 会自动启动打包器/开发服务器。如果你希望使用 npx expo start 命令独立启动打包器,可以在 npx expo run:[android|ios] 命令中传入 --no-bundler。
常见问题
我可以在不安装 Expo Modules API 的情况下使用 Expo CLI 吗?
安装 expo 包时,npx install-expo-modules 也会安装 Expo Modules API。如果你现在想先试用 Expo CLI,而不安装 Expo Modules API,可以使用 npm install 安装 expo 包,然后配置 react-native.config.js,将该包排除在自动链接之外:
module.exports = { dependencies: { expo: { platforms: { android: null, ios: null, macos: null, }, }, }, };
注意: 如果未安装 Expo API Modules,某些功能(例如
expo-dev-client或expo-router)将不可用。
我可以将 prebuild 用于树外平台,例如 macOS 或 Windows 吗?
可以!更多信息请参阅 Customized Prebuild Example 仓库。
下一步
现在,expo 包已经安装并在你的项目中配置完成,你就可以开始使用 Expo CLI 和 SDK 的所有功能了。以下是一些建议的后续步骤,帮助你深入了解:
了解 Expo CLI 中可用的命令和参数。
了解如何为你的项目自定义 Metro 打包器配置。
使用 app.json 自动管理你的原生目录。
在你的应用中试用 Expo SDK 中的库。
Expo Router 将 Web 上最优秀的路由理念带到原生 Android 和 iOS 应用中。