故障排除
编辑
修复 Expo Router 设置中的常见问题。
React Native DevTools 中缺少文件或源映射
如果您的 Chrome DevTools 在其忽略列表中有排除项,则可能会发生此情况。要解决此问题,请使用 React Native DevTools:
- 通过在终端窗口中运行的开发服务器按 j 启动 React Native DevTools
- 点击齿轮图标打开 设置
- 在 扩展 下,点击 恢复默认设置并重新加载
- 再次打开 设置,转到 忽略列表 选项卡
- 取消选中任何对
/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', };