You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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,需手动清理深层缓存:

    1. 删除项目根目录的node_modules、package-lock.json/yarn.lock
    2. 安卓端删除android/.gradle、android/app/build目录;iOS端删除ios/Pods、ios/Podfile.lock
    3. 重新执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:43:16