解决Tamagui项目安卓模拟器运行时出现的「Missing tamagui config」渲染错误
我完全懂这种突然翻车的烦躁——之前好好跑的Tamagui项目,安卓模拟器突然蹦出「Missing tamagui config」的渲染错误,换谁都得挠头。结合你已经做的排查步骤,咱们针对性地解决这个问题:
先搞定版本不一致的核心问题
你提到@tamagui/core是1.120.2,其他Tamagui相关包是1.120.0,这绝对是高危隐患!Tamagui对所有依赖包的版本一致性要求极高,哪怕小版本差一点,都可能导致内部模块不兼容,触发config找不到的错误。
解决办法:在package.json里添加resolutions字段,强制所有Tamagui相关包统一到同一个版本:
"resolutions": { "@tamagui/core": "1.120.0", "tamagui": "1.120.0", "@tamagui/*": "1.120.0" }
然后彻底清理缓存重装:
rm -rf node_modules yarn.lock android && yarn cache clean && yarn install && yarn android
确认Provider的挂载优先级
要保证TamaguiProvider是整个应用的最外层提供者,绝对不能有任何Tamagui组件在它之前渲染。比如检查你的app/_layout.tsx(Expo Router的根布局)是不是正确包裹了Provider:
// app/_layout.tsx import { Provider } from './Provider'; import { Stack } from 'expo-router'; export default function RootLayout() { return ( <Provider> <Stack /> </Provider> ); }
还要注意:如果你的路由里有自定义的loading组件、错误边界组件,这些组件里也不能用Tamagui的UI组件,必须放在Provider内部。
简化配置排查自定义代码问题
虽然你说config导出没问题,但可以先暂时用默认配置测试,排除自定义代码的锅:
// tamagui.config.ts import { createTamagui } from 'tamagui'; import { config as defaultConfig } from '@tamagui/config/v3'; const config = createTamagui(defaultConfig); export type Conf = typeof config; declare module 'tamagui' { interface TamaguiCustomConfig extends Conf {} } export default config;
如果用默认配置能正常启动,说明问题出在你自定义的colors或者其他配置项里,再逐步把自定义内容加回去,每加一项就跑一次项目,定位到具体的问题代码。
清理模拟器和Expo缓存
有时候旧缓存会搞鬼,除了清理node_modules,还要:
- 重启安卓模拟器,并且清除应用数据(长按模拟器里的应用图标→应用信息→存储→清除数据)
- 用
npx expo start --clear启动项目,彻底清除Expo的缓存,再重新运行安卓
排查重复配置/Provider的问题
错误提示里提到了“duplicate config”,检查项目里有没有以下情况:
- 其他文件也导入了
tamagui.config.ts,并且重复调用了createTamagui - 某个页面或者第三方组件里意外嵌套了另一个
TamaguiProvider - 有没有安装了多个版本的Tamagui依赖(可以用
yarn list tamagui查看所有依赖版本)
为什么之前正常突然出问题?
大概率是版本不一致导致的——可能你安装某个新依赖时,yarn自动升级了@tamagui/core的版本;也可能lockfile里的版本被意外修改;或者模拟器的旧构建缓存没有及时清理,导致新旧版本的代码混在一起运行。
备注:内容来源于stack exchange,提问作者kemicofa

