故障排除

编辑

修复 Expo Router 设置中的常见问题。


React Native DevTools 中缺少文件或源映射

如果您的 Chrome DevTools 在其忽略列表中有排除项,则可能会发生此情况。要解决此问题,请使用 React Native DevTools:

  1. 通过在终端窗口中运行的开发服务器按 j 启动 React Native DevTools
  2. 点击齿轮图标打开 设置
  3. 扩展 下,点击 恢复默认设置并重新加载
  4. 再次打开 设置,转到 忽略列表 选项卡
  5. 取消选中任何对 /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'; // 必须导出,否则快速刷新不会更新上下文 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 添加到路由的布局中,以确保初始路由已配置。初始路由在移动应用中有些独特,并且在系统中适应不良 — 改进待定。

app/_layout.tsx
export const unstable_settings = { initialRouteName: 'index', };