使用expo-in-app-purchases库遇__expo_module_name__未定义错误求助
解决expo-in-app-purchases引入后出现
__expo_module_name__未定义及main未注册错误 排查步骤及解决方案
检查依赖版本兼容性
运行expo doctor命令,它会自动检测expo与expo-in-app-purchases的版本匹配问题,按照提示升级或降级对应依赖包。版本不匹配是触发底层模块注册错误的常见原因。验证项目基础配置
确认app.json或app.config.js中:expo.ios.bundleIdentifier和expo.android.package字段配置正确(不能为空或格式错误)expo.modules列表中包含expo-in-app-purchases(expo 47+版本通常自动配置,但手动检查可避免遗漏)
彻底清除缓存
除了npx expo start --clear,需手动清理深层缓存:- 删除项目根目录的
node_modules、package-lock.json/yarn.lock - 安卓端删除
android/.gradle、android/app/build目录;iOS端删除ios/Pods、ios/Podfile.lock - 重新执行
npx expo install,再启动项目时使用npx expo start --reset-cache
- 删除项目根目录的
调整模块引入时机
避免在App组件外部提前初始化模块,应在组件的useEffect中延迟初始化,示例代码:import { useEffect } from 'react'; import * as InAppPurchases from 'expo-in-app-purchases'; export default function App() { useEffect(() => { async function setupIAP() { const { status } = await InAppPurchases.connectAsync(); // 后续IAP逻辑 } setupIAP(); return () => InAppPurchases.disconnectAsync(); }, []); // 组件其他代码 }提前引入并调用模块方法,可能导致模块未完成注册就被触发,引发
__expo_module_name__未定义错误。检查Hermes引擎配置
若自定义了metro.config.js,确保未修改或禁用expo模块的解析规则,保持默认的expo metro配置即可。最小化项目测试
创建新的expo项目npx create-expo-app test-iap,安装expo-in-app-purchases后进行基础测试。若新项目可正常运行,说明原项目存在深层配置或缓存问题,可逐步迁移代码排查。
内容的提问来源于stack exchange,提问作者Fevzi Özçelik
相关产品推荐
相关产品推荐

