从 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

在大多数情况下,只需在项目目录中执行以下命令来安装该包即可:

Terminal
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 别名中的 pathsbaseUrl已集成到 Metro 中
  • 通过 Metro 支持 Web 支持。对 React Native Web 提供完整类型支持。
  • 支持现代 CSS,包括 Tailwind、PostCSS、CSS Modules、SASS 等。
  • 使用 Expo Router 和 Metro web 进行静态站点生成。
  • 开箱即用地支持 monorepo
  • 支持 Expo 工具,例如 expo-dev-clientExpo Updates 协议EAS Update
  • 使用 npx expo run:ios 时会自动执行 pod install
  • npx expo install 会为知名包选择兼容的依赖版本。
  • 运行 npx expo run:[android|ios]npx expo start 时会自动检测端口。如果默认端口上已有其他应用在运行,则会使用其他端口。
  • 在交互式提示中使用 Shift + aShift + 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-androidnpx react-native run-ios

Terminal
# 针对 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,将该包排除在自动链接之外:

react-native.config.js
module.exports = { dependencies: { expo: { platforms: { android: null, ios: null, macos: null, }, }, }, };

注意: 如果未安装 Expo API Modules,某些功能(例如 expo-dev-clientexpo-router)将不可用。

我可以将 prebuild 用于树外平台,例如 macOS 或 Windows 吗?

可以!更多信息请参阅 Customized Prebuild Example 仓库

下一步

现在,expo 包已经安装并在你的项目中配置完成,你就可以开始使用 Expo CLI 和 SDK 的所有功能了。以下是一些建议的后续步骤,帮助你深入了解:

Expo CLI 参考

了解 Expo CLI 中可用的命令和参数。

自定义 Metro

了解如何为你的项目自定义 Metro 打包器配置。

采用 Prebuild

使用 app.json 自动管理你的原生目录。

使用 Expo SDK

在你的应用中试用 Expo SDK 中的库。

Expo Router

Expo Router 将 Web 上最优秀的路由理念带到原生 Android 和 iOS 应用中。