EXPO + react-native-reanimated调试问题

mftmpeh8  于 2023-04-12  发布在  React
关注(0)|答案(2)|浏览(264)

我在Expo SDK 41上运行了一个应用程序,它有一些基本的react-native-reanimated@~2.1.0用法,调试工作得很好。
在某个阶段,SDK 41被弃用,我被迫升级,所以我选择了最新的45。
升级后,我无法再使用远程调试。当我打开远程调试时,应用程序崩溃并显示以下错误

Requiring module "node_modules\react-native-reanimated\src\Animated.js", which threw an exception: Invariant Violation: Calling synchronous methods on native modules is not supported in Chrome.

Consider providing alternative methods to expose this method in debug mode, e.g. by exposing constants ahead-of-time.

而且我什么也做不了(我甚至不能在不清除expo应用程序数据的情况下关闭远程调试)。
这个问题似乎与react-native-reanimated有关(当前版本是2.8.0)

Expo docs声明:
react-native-reanimated@2中的新API使用与远程JS调试不兼容的React Native API。因此,您只能使用Flipper调试使用这些API的应用程序,这在Expo管理的工作流中还不可用。如果你使用Reanimated 2中的新API,你将无法使用远程JS调试。如果您只使用Reanimated 1中提供的API,则远程JS调试将继续工作。
尝试降级到react-native-reanimated@~2.1.0也不起作用。
我一定是错过了什么,因为否则我被迫升级SDK,与react-native-reanimated结合使用,不允许我再进行调试,这似乎有点荒谬。
请告诉我有什么我可以做的。
谢谢

1tuwyuhd

1tuwyuhd1#

这是什么链接到世博会的文档显示我在这个时候:
Reanimated使用与JavaScriptCore的“远程JS调试”不兼容的React Native API。为了使用react-native-reanimated与您的应用程序一起使用调试器,您将需要使用爱马仕JavaScript引擎和〉Hermes的JavaScript Inspector。
无论如何,这似乎是一个问题复活自己谈论在docs
一段时间以来,解决这个问题的方法是在这个答案中共享的代码here
这甚至不是一个特别的复活问题,而是RN无法使用一些与调试有关的同步特性进行开发。
不管怎样,希望这对你有帮助

myzjeezk

myzjeezk2#

在expo repository上发布了一个问题后,我得到了以下答案,实际上并没有解决远程调试器的问题,但给出了相同的替代方案。基本上他们建议使用爱马仕引擎。
你好!这是不幸的,也是不方便的。这是生态系统发展方向的副作用-从JavaScript Core和Chrome中的远程调试转向爱马仕,并将调试器附加到设备上的Hermes引擎。Reanimated不再支持Chrome中的远程调试。为了在SDK 45+中使用Reanimated调试JS,我们建议使用Hermes。您可以在应用中设置此功能。json如下:

{
  "expo": {
    "// your other config here": "...",
    "android": {
      "jsEngine": "hermes"
    }
  }
}

现在,当你运行expo start并启动你的应用程序时,按j,它将启动一个Chrome Inspector,该检查器将直接连接到你设备上的应用程序(我建议将expo-cli升级到最新版本,以确保你拥有此功能)。

相关问题