WatermelonDB 0.27.1与React Native 0.76.5等环境兼容问题咨询
我创建了全新的React Native TypeScript项目:
npx @react-native-community/cli init ReactNativeTry
项目可正常构建运行。随后我按照文档添加WatermelonDB依赖:
npm install @nozbe/watermelondb npm install -D @babel/plugin-proposal-decorators
并配置了babel.config.js、android/settings.gradle、android/app/build.gradle及MainApplication.kt。但重启Metro并构建时出现错误:
ReactNativeTry/node_modules/@nozbe/watermelondb/native/android-jsi/src/main/java/com/nozbe/watermelondb/jsi/WatermelonDBJSIPackage.java:3: error: cannot find symbol
import com.facebook.react.bridge.JSIModulePackage;
^
symbol: class JSIModulePackage
location: package com.facebook.react.bridge
此前我在React Native 0.73.0(纯JS)搭配WatermelonDB ^0.27.1时无此问题。当前环境:Node.js 20.15.1、JDK 17.0.5。若切换至Liberica-JDK 21.0.4并直接构建Android应用,会出现新错误:
Caused by: com.android.ide.common.process.ProcessException: Error while executing process /Library/Java/JavaVirtualMachines/graalvm-jdk-17.0.8+9.1/Contents/Home/bin/jlink with arguments {--module-path /Users/foo/.gradle/caches/8.10.2/transforms/ed9dc1d835b24de942cfe9ca348bc72b-a5dbfd8c-5326-4795-9959-cc93879e9234/transformed/output/temp/jmod --add-modules java.base --output /Users/foo/.gradle/caches/8.10.2/transforms/ed9dc1d835b24de942cfe9ca348bc72b-a5dbfd8c-5326-4795-9959-cc93879e9234/transformed/output/jdkImage --disable-plugin system-modules}
且构建时仍使用GraalVM-JDK 17而非JDK 21。此项目为纯React Native应用,未添加Reanimated等特殊库。现咨询这些库、JDK及Node.js是否兼容?
1. JSIModulePackage 找不到的根本原因
这个错误是React Native版本与WatermelonDB版本不匹配导致的:
- React Native 0.74+ 移除了
JSIModulePackage类(旧版RN中用于注册JSI模块的API),而当前安装的WatermelonDB版本仍依赖该废弃API。 - 此前RN 0.73.0 + WatermelonDB ^0.27.1正常运行,是因为RN 0.73仍保留该类,但新版RN(当前项目应为0.74+)已移除。
解决办法:
- 升级WatermelonDB到兼容RN 0.74+的版本:安装
@nozbe/watermelondb@0.28.0及以上(该版本适配了RN 0.74的API变更)。 - 若需保留旧版RN,可锁定RN版本为0.73.x,继续使用WatermelonDB ^0.27.1。
2. JDK兼容性问题
- React Native官方要求:RN 0.74+推荐使用JDK 17,暂不支持JDK 21(Android Gradle Plugin对JDK 21的支持仍存在兼容性问题)。
- 构建时仍用GraalVM-JDK 17,是因为系统环境变量或Android Studio的JDK配置未正确切换到JDK 21;即使切换,由于AGP不兼容,仍会出现
jlink错误。
解决办法:
- 保持使用JDK 17(官方推荐的Liberica JDK 17或Oracle JDK 17),避免使用JDK 21。
- 若需切换JDK,确保:
- 系统环境变量中
JAVA_HOME指向JDK 17路径。 - Android Studio的
Project Structure中指定JDK为17版本。
- 系统环境变量中
3. Node.js兼容性
Node.js 20.x与RN 0.74+、WatermelonDB 0.28+完全兼容,无需调整。
总结兼容性矩阵
| React Native版本 | WatermelonDB版本 | JDK版本 | Node.js版本 |
|---|---|---|---|
| 0.73.x | ^0.27.1 | 17 | 18+/20+ |
| 0.74+ | ^0.28.0 | 17 | 18+/20+ |
内容的提问来源于stack exchange,提问作者Oleksii Pylypchuk

