故障排除
编辑页面
修复 Expo Router 设置中的常见问题。
For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.
React Native DevTools 中缺少文件或 source maps
如果你的 Chrome DevTools 的忽略列表中包含排除项,就可能发生这种情况。要修复此问题,请使用 React Native DevTools:
- 在终端窗口中运行的开发服务器里按 j 启动 React Native DevTools
- 通过点击齿轮图标打开 Settings
- 在 Extensions 下,点击 Restore defaults and reload
- 再次打开 Settings,然后进入 Ignore List 选项卡
- 取消勾选
/node_modules/的任何排除项
未定义 EXPO_ROUTER_APP_ROOT
如果 process.env.EXPO_ROUTER_APP_ROOT 未定义,你会看到以下错误:
Terminal
- Invalid call at line 11: process.env.EXPO_ROUTER_APP_ROOT First argument of require.context should be a string.当项目的 babel.config.js 中未使用 Babel 插件 expo-router/babel 时,就可能发生这种情况。你可以尝试使用以下命令清除缓存:
Terminal
- npx expo start --clear或者,你也可以通过在项目根目录创建一个 index.js 文件,并使用以下内容来规避此问题:
index.js
import { registerRootComponent } from 'expo'; import { ExpoRoot } from 'expo-router'; // 必须导出,否则 Fast Refresh 不会更新上下文 export function App() { const ctx = require.context('./app'); return <ExpoRoot context={ctx} />; } registerRootComponent(App);
然后,在 package.json 中更新应用的主入口点:
package.json
{ "main": "index.js" %%placeholder-start%%... %%placeholder-end%% }
不要使用此方法来更改根目录(app),因为它不会考虑在任何其他位置的使用情况。
未启用 require.context
当使用未启用上下文模块的 @expo/metro-config 自定义版本时,就可能发生这种情况。Expo Router 要求项目的 metro.config.js 使用 expo-router/metro 作为默认配置。删除 metro.config.js,或扩展 expo/metro-config。有关更多信息,请参阅 自定义 metro。
缺少返回按钮
如果你设置了一个模态框或其他预期应有返回按钮的屏幕,那么你需要将 unstable_settings 添加到路由的布局中,以确保初始路由已正确配置。初始路由在某种程度上是移动应用特有的,并且在系统中的适配有些别扭 —— 改进仍在进行中。
src/app/_layout.tsx
export const unstable_settings = { initialRouteName: 'index', };