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

Expo Go集成WatermelonDB报错:NativeModules.WMDatabaseBridge未定义

解决Expo Go中WatermelonDB NativeModules.WMDatabaseBridge未定义问题

一、核心问题:Expo Go不支持WatermelonDB原生模块

Expo Go是预构建的通用客户端,默认未包含WatermelonDB的原生桥接模块,这是你遇到NativeModules.WMDatabaseBridge未定义的根本原因。必须改用自定义Dev Client才能使用依赖原生模块的WatermelonDB。

二、分步解决方案

1. 配置自定义Dev Client并重新构建

  • 安装Dev Client依赖:
    npx expo install expo-dev-client
    
  • 清理并重新生成原生项目文件:
    npx expo prebuild --clean
    
  • 构建自定义Android客户端:
    npx expo run:android
    
  • 启动项目并使用自定义客户端打开:
    npx expo start --dev-client
    

2. 修复Android元数据版本不匹配问题

在app.json的expo-build-properties中明确指定兼容的Kotlin和Java版本,解决1.8.0/1.6.0版本冲突:

"expo": {
  "plugins": [
    "@skam22/watermelondb-expo-plugin",
    [
      "expo-build-properties",
      {
        "android": {
          "compileSdkVersion": 33,
          "targetSdkVersion": 33,
          "minSdkVersion": 24,
          "kotlinVersion": "1.8.0",
          "javaVersion": "11"
        }
      }
    ]
  ]
}

3. 验证依赖与配置正确性

  • 更新至最新兼容版本:
    npm install watermelondb@latest @skam22/watermelondb-expo-plugin@latest
    
  • 检查babel.config.js的装饰器配置(必须开启legacy模式):
    module.exports = function(api) {
      api.cache(true);
      return {
        presets: ['babel-preset-expo'],
        plugins: [
          ['@babel/plugin-proposal-decorators', { legacy: true }],
        ],
      };
    };
    
  • 确认metro.config.js的扩展名配置:
    const { getDefaultConfig } = require('expo/metro-config');
    const config = getDefaultConfig(__dirname);
    config.resolver.sourceExts.push('cjs');
    module.exports = config;
    

4. 排查"main未注册"异常

这个错误通常是应用启动时的代码阻塞导致:

  • 检查database.js的初始化逻辑,确保无语法错误或异步阻塞:
    import { Database } from '@nozbe/watermelondb';
    import SQLiteAdapter from '@nozbe/watermelondb/adapters/sqlite';
    import schema from './schema';
    import Family from './models/Family';
    import FamilyMember from './models/FamilyMember';
    import User from './models/User';
    
    const adapter = new SQLiteAdapter({ schema });
    const database = new Database({
      adapter,
      modelClasses: [Family, FamilyMember, User],
      actionsEnabled: true,
    });
    
    export default database;
    
  • 确保App.js中导入数据库的代码未阻塞组件渲染,避免在组件顶层执行异步操作。

5. 清除缓存重置环境

  • 清除Metro缓存:
    npx expo start --clear
    
  • 重置依赖:
    rm -rf node_modules package-lock.json && npm install
    

内容的提问来源于stack exchange,提问作者Alex O'Connor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 19:31:19