This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
手动安装
通过这些详细的说明,学习如何将 Expo Router 添加到现有项目中。
如果你已有现有项目并且想要添加 Expo Router,请按照以下步骤操作。对于新项目,请参阅介绍指南中的快速开始。
🌐 Follow the steps below if you have an existing project and want to add Expo Router. For new projects, see the Quick start in the introduction guide.
1 要求
1 要求
确保你的计算机已设置好以运行 Expo 应用。
1
安装依赖
🌐 Install dependencies
你需要安装以下依赖:
🌐 You'll need to install the following dependencies:
- npx expo install expo-router react-native-safe-area-context react-native-screens expo-linking expo-constants expo-status-bar上述命令将安装与你的项目所使用的 Expo SDK 版本兼容的这些库版本。
🌐 The above command will install versions of these libraries that are compatible with the Expo SDK version your project is using.
2
设置入口点
🌐 Setup entry point
对于属性 main,在 package.json 中使用 expo-router/entry 作为其值。初始客户端文件是 src/app/_layout.tsx(如果不使用 src 目录,则为 app/_layout.tsx)。
🌐 For the property main, use the expo-router/entry as its value in the package.json. The initial client file is src/app/_layout.tsx (or app/_layout.tsx if not using the src directory).
{ "main": "expo-router/entry" }
自定义入口点以初始化和加载副作用
你可以在你的 Expo Router 项目中创建一个自定义入口点,以在应用加载根布局(src/app/_layout.tsx)之前初始化和加载副作用。以下是一些自定义入口点的常见情况:
🌐 You can create a custom entry point in your Expo Router project to initialize and load side-effects before your app loads the root layout (src/app/_layout.tsx). Below are some of the common cases for a custom entry point:
- 正在初始化全局服务,如分析、错误报告等。
- 设置 polyfill
- 使用
LogBox从react-native忽略特定日志
-
在项目根目录下创建一个新文件,例如 index.js。创建该文件后,项目结构应如下所示:
srcapp_layout.tsxindex.jspackage.jsonOther project files -
将你的自定义配置导入或添加到文件中。然后,导入
expo-router/entry来注册应用入口。请记住始终最后导入它,以确保在应用渲染之前所有配置都已正确设置。index.js// Import side effects first and services // Initialize services // Register app entry through Expo Router import 'expo-router/entry'; -
在 package.json 中更新
main属性,以指向新的入口文件。package.json{ "main": "index.js" }
3
修改项目配置
🌐 Modify project configuration
在你的应用配置中添加深度链接 scheme 并启用类型化路由:
🌐 Add a deep linking scheme and enable typed routes in your app config:
{ "expo": { "scheme": "your-app-scheme", "experiments": { "typedRoutes": true } } }
如果你正在为网页开发应用,请安装以下依赖:
🌐 If you are developing your app for web, install the following dependencies:
- npx expo install react-native-web react-dom然后,通过将以下内容添加到你的应用配置中来启用Metro web支持:
🌐 Then, enable Metro web support by adding the following to your app config:
{ "expo": { "web": { "bundler": "metro" } } }
4
修改 babel.config.js
🌐 Modify babel.config.js
如果你的项目有一个 babel.config.js 文件,确保你将 babel-preset-expo 用作 preset。如果你不需要任何自定义的 Babel 配置,你可以完全删除该文件:
🌐 If your project has a babel.config.js file, ensure you use babel-preset-expo as the preset. If you don't need any custom Babel configuration, you can delete the file entirely:
module.exports = function (api) { api.cache(true); return { presets: ['babel-preset-expo'], }; };
5
配置路径别名
🌐 Configure path aliases
如果你正在使用 src 目录,请在你的 tsconfig.json 中添加路径别名,这样你就可以使用像 @/components/button 这样的简短导入路径,而不是相对路径:
🌐 If you are using the src directory, add path aliases to your tsconfig.json so you can use short import paths like @/components/button instead of relative paths:
{ "extends": "expo/tsconfig.base", "compilerOptions": { "strict": true, "paths": { "@/*": ["./src/*"] } }, "include": ["**/*.ts", "**/*.tsx", ".expo/types/**/*.ts", "expo-env.d.ts"] }
@/* 别名在上面的例子中映射到 src 目录。
🌐 The @/* alias maps to the src directory in the above example.
6
7
更新分辨率
🌐 Update resolutions
如果你正在从旧版本的 Expo Router 升级,请确保从 package.json 中移除所有过时的 Yarn 解析或 npm 覆盖项。具体来说,请从 package.json 中移除 metro、metro-resolver、react-refresh 的解析。
🌐 If you're upgrading from an older version of Expo Router, ensure you remove all outdated Yarn resolutions or npm overrides in your package.json. Specifically, remove metro, metro-resolver, react-refresh resolutions from your package.json.