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

Expo集成react-native-purchases报Native module cannot be null错误

报错原因

Expo 托管工作流默认不会自动链接未做Expo适配的原生React Native模块,你直接安装裸RN生态的react-native-purchases且未做任何原生端配置时,JS层找不到对应的原生实现,就会触发Invariant Violation: Native module cannot be null报错。

解决方法

根据你的项目是否要保留托管工作流,二选一即可:

  • 保留Expo托管工作流(无需eject,推荐)
    1. 先卸载当前安装的不适配版本:npm uninstall react-native-purchases
    2. 安装Expo适配版的依赖和对应的配置插件:
      npx expo install react-native-purchases
      npx expo install @config-plugins/react-native-purchases
      
    3. 打开项目根目录的app.json,在expo配置下的plugins数组中加入RevenueCat插件配置,示例:
      {
        "expo": {
          // 其他原有配置保留
          "plugins": [
            [
              "@config-plugins/react-native-purchases",
              {
                "ios": {
                  "podVersion": "4.6.0"
                }
              }
            ]
          ]
        }
      }
      
    4. 执行npx expo prebuild重新生成原生工程目录,再通过expo run:ios或expo run:android构建自定义开发客户端调试即可。注意默认的Expo Go客户端不包含该原生模块,必须用自定义构建的开发客户端才能正常运行。
  • 切换到Expo裸工作流
    执行npm run eject弹出原生工程后,补全iOS端的Pod依赖、StoreKit框架引入、必要权限配置,以及Android端的仓库地址、Manifest配置,重新构建原生应用即可正常加载模块。
额外注意事项
  • 如果你是在运行Jest单元测试时触发该报错,需要在测试配置中手动mockreact-native-purchases模块,避免测试环境尝试加载不存在的原生模块,示例mock代码:
    jest.mock('react-native-purchases', () => ({
      setupPurchases: jest.fn(),
      getOfferings: jest.fn(),
      purchasePackage: jest.fn(),
      // 按需补充你项目中实际用到的所有方法即可
    }))
    
  • 所有依赖原生代码的第三方RN包,在Expo托管流中都需要对应配置插件做预构建处理,直接npm安装后直接运行必然会报原生模块为空的错误。

内容的提问来源于stack exchange,提问作者Nima Pourjafar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:24:20