使用Expo Go集成RNSkia遇Native模块未找到等错误求助
解决Expo Go中使用RNSkia遇到的Native模块缺失及"main"未注册问题
一、解决"Native RNSkia Module cannot be found"错误
你当前的版本组合(expo ~48.0.6、@shopify/react-native-skia 0.1.172、react-native 0.71.8)是兼容的,但Expo Go无法直接运行包含RNSkia的项目——因为RNSkia包含原生依赖,而Expo Go的预构建包并未集成它。必须使用Expo Dev Client来构建自定义客户端:
- 安装Expo Dev Client依赖
npx expo install expo-dev-client
- 配置项目插件
在app.json或app.config.js的expo.plugins数组中添加RNSkia的插件配置:
{ "expo": { // ...其他配置 "plugins": [ "@shopify/react-native-skia", "expo-dev-client" ] } }
- 构建自定义Dev Client
根据你的目标平台运行命令,生成包含RNSkia原生模块的客户端:
# Android npx expo run:android # iOS npx expo run:ios
- 启动项目并使用自定义客户端
用Dev Client模式启动Metro服务器:
npx expo start --dev-client
然后在刚构建好的自定义客户端中打开你的项目,此时原生模块应该能正常加载。
二、解决"Invariant Violation: 'main' has not been registered"错误
这个错误大多是第一个问题导致的模块加载失败,进而使AppRegistry未正确执行注册。解决完上述RNSkia模块问题后,大概率会自动修复。如果仍出现该错误,可尝试以下操作:
- 清除项目缓存,强制重新加载所有模块:
npx expo start --clear
- 检查入口文件(
index.js或App.js)是否正确注册了主组件:
确保文件末尾存在类似代码:
import { AppRegistry } from 'react-native'; import App from './App'; import { name as appName } from './app.json'; AppRegistry.registerComponent(appName, () => App);
- 验证Metro配置文件(
metro.config.js)是否正确,确保未排除RNSkia相关文件。如果需要,可添加如下配置:
const { getDefaultConfig } = require('expo/metro-config'); const config = getDefaultConfig(__dirname); // 确保RNSkia的文件能被正确解析 config.resolver.sourceExts.push('skia'); module.exports = config;
内容的提问来源于stack exchange,提问作者Strike
相关产品推荐
相关产品推荐

