React Native CLI
我在 react-native: "^0.64.0" 和 react-navigation 5.x
遇到了同样的问题
我在 React Navigation Getting Started 上进行了安装。我开始使用 createStackNavigator 和 createBottomTabNavigator,我的构建工作正常。
我添加 createDrawerNavigator 后,我的构建失败并出现错误:
无法解析模块react-native-reanimated
和/或
不变量违规:TurboModuleRegistry.getEnforcing(…): 'NativeReanimated' 找不到
依赖关系
安装 React 导航
npm install @react-navigation/native
安装依赖项
yarn add react-native-reanimated react-native-gesture-handler
反应原生屏幕反应原生安全区域上下文
@react-native-community/masked-view
问题原因
官方文档中提到的重生依赖"react-native-reanimated": "^2.0.0"需要一些额外的配置,包括babel、Hermes 和 MainApplication.java 与 React Native 一起正常工作。
我猜 React Native 尚不支持 Reanimated ^2.0.0 ^0.64.0
查看下方解决方案或按照官方文档解决React Native Reanimated
除了添加依赖项之外,还需要其他步骤
包.json
解决方案
注意:进行更改后,请务必清除 gradle 和 yarn 缓存
需要做三处改变
- 将 Reanimated 的 babel 插件添加到您的
babel.config.js
module.exports = {
...
plugins: [
...
'react-native-reanimated/plugin',
],
};
- 编辑
android/app/build.gradle开启Hermes引擎
project.ext.react = [
enableHermes: true // <- here | clean and rebuild if changing
]
- 在
MainApplication.java 中重新激活插件
import com.facebook.react.bridge.JSIModulePackage; // <- add
import com.swmansion.reanimated.ReanimatedJSIModulePackage; // <- add
...
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
...
@Override
protected String getJSMainModuleName() {
return "index";
}
@Override
protected JSIModulePackage getJSIModulePackage() {
return new ReanimatedJSIModulePackage(); // <- add
}
};
...