修复 Expo 路由设置的常见问题。
EXPO_ROUTER_APP_ROOT
未定义¥EXPO_ROUTER_APP_ROOT
not defined
如果未定义 process.env.EXPO_ROUTER_APP_ROOT
,你将看到以下错误:
¥If process.env.EXPO_ROUTER_APP_ROOT
is not defined you'll see the following error:
-
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
时,可能会发生这种情况。你可以尝试使用以下方法清除缓存:
¥This can happen when the Babel plugin expo-router/babel
is not used in the project babel.config.js. You can try clearing the cache with:
-
npx expo start --clear
或者,你可以通过在项目的根目录中创建一个包含以下内容的 index.js 文件来规避此问题:
¥Alternatively, you can circumvent this issue by creating an index.js file in the root of your project with the following contents:
import { registerRootComponent } from 'expo';
import { ExpoRoot } from 'expo-router';
// Must be exported or Fast Refresh won't update the context
export function App() {
const ctx = require.context('./app');
return <ExpoRoot context={ctx} />;
}
registerRootComponent(App);
不要使用它来更改根目录(应用),因为它不会考虑在任何其他地方的使用。
¥Do not use this to change the root directory (app) as it won't account for usage in any other places.
require.context
未启用¥require.context
not enabled
当使用未启用上下文模块的自定义版本的 @expo/metro-config
时,可能会发生这种情况。Expo Router 要求项目 Metro.config.js 使用 expo-router/metro
作为默认配置。删除 metro.config.js,或扩展 expo/metro-config
。请参阅 定制 Metro 了解更多信息。
¥This can happen when using a custom version of @expo/metro-config
that does not enable context modules. Expo Router requires the project metro.config.js to use expo-router/metro
as the default configuration. Delete the metro.config.js, or extend expo/metro-config
. See Customizing metro for more information.