用Flipper调试React Native应用程序

8,277 阅读8分钟

我不得不承认,我通常不会设置调试器,除非它很容易使用。我做了近二十年的开发者,早在我开始的时候,这绝不是一件容易的事。

我曾经能够让不同语言的调试器工作过一两次,但只要出了问题就放弃了,而且,在大多数情况下,直到最近才使用任何调试器。我主要用JavaScript工作,可以用console.log 。它工作得很好,而且我不需要进入一个配置东西的兔子洞。

但后来我了解到Flipper,这是我使用过的最好的调试器之一,适用于任何技术。

什么是Flipper?

你可以在React Native中只使用console.log ,但有时这是不足够的,你可以做一些调试。

你可以在Redux状态更新时不断地将其记录到控制台,但这些结果比一个漂亮的表格要难看得多,这个表格列出了所有的更新和你可以点击查看的变化明细。

你也可以想办法记录你的网络调用的每一部分,或者你可以直接使用Flipper,马上看到为什么你会得到一个403错误。

但Flipper能做的远不止这些。它有一个插件系统用于添加专门的调试。本文将指导你如何使用Flipper对React Native进行调试。

安装Flipper

安装桌面应用程序很容易。你可以在这里找到Windows、Mac或Linux的安装文件。

根据你的操作系统,你还需要安装Android和iOS的开发工具,这才有意义,否则,你为什么要安装Flipper?你还需要安装OpenSSL

我早先发现Flipper的时候,我正在做的一个项目使用了旧版本的React Native,但我不想调查在iOS和Android上手动设置它。

幸运的是,现在只要你使用0.62或更高的版本,它就能在React Native中工作。要在一个新的React Native应用中开始使用Flipper,请安装Flipper桌面应用,启动Flipper,并运行你的项目。

一旦你安装了Flipper,点击左边菜单上的Setup Doctor按钮,确保你已经安装了所有的依赖项。如果你缺少什么,Flipper会告诉你如何解决这个问题。

Flipper Setup Doctor

你也可以手动添加Flipper到React Native Android应用React Native iOS应用本地Android应用本地iOS应用

内置的Flipper功能

开箱即用,Flipper的功能超过了你对一个标准调试器的期望。它把你想知道的关于项目状态的一切都放在一个地方。

用Flipper轻松调试

通过点击Hermes调试器菜单,你可以在Flipper中像在Chrome中一样轻松地进行调试。你可以使用console.log --就像我在下面做的那样--如果你想的话。在紧要关头,它的效果很好。

Hermes Debugger Menu

本地日志

如果你用React Native开发,你可能知道你必须在多个地方调试问题,包括本地。有时应用程序崩溃了,React Native日志并没有什么帮助。

Flipper在左侧菜单的设备部分提供了对本地日志的访问。当你查看日志时,知道你在寻找什么是有帮助的,所以你可以使用顶部的过滤器字段来缩小结果。

Logs Tab

用Flipper启用React DevTools

当我开始用React Native开发时,我很怀念能够使用React DevTools。在你的代码中很容易忽视你的组件道具中的错误,而这个工具会准确地告诉你发生了什么。它对寻找第三方组件中的未记录的道具也很有帮助。

React Devtools Tab

网络调试

这个工具帮助我追踪了一个闪屏被卡住的原因。一个网络调用失败,使应用程序无法进入仪表盘屏幕。

如果你通过Chrome进行调试,如果不在项目中添加一些代码,你就无法看到应用程序的网络调用。你能看到的只是字体和图片的网络调用。而且,为了能够通过Chrome调试应用程序的网络调用,我不得不在App.tsx 文件中添加这些代码。

global.XMLHttpRequest = global.originalXMLHttpRequest || global.XMLHttpRequest;

有了Flipper,我再也不用担心这个问题了。

Network Debugger

Redux调试器

Redux很好,直到你在某处有一个错别字,并且无法在你的代码中发现它。有时console.log ,用于调试Redux,但这并不容易。你通常要在多个地方登录才能弄清楚发生了什么事。

这时你会开始怀疑你为什么需要Redux。但如果有一个Redux调试器,可以记录所有的操作,并显示更新前后的状态,可以让你不至于用console.logs ,在应用中追寻你的数据。

Redux Debugger

共享的偏好查看器

这个屏幕将帮助你确定共享偏好中的情况,也就是说,如果你的应用程序每次关闭时都将用户注销。

Shared Preferences Viewer

本地布局检查器

这个检查器可以让你看到你的本地布局中发生了什么。它还支持一些第三方的React Native组件,如LithoComponentKit

Layout Inspector

使用Flipper的其他好处

Flipper允许你用左侧边栏和设备选择器下面的按钮来控制其他东西。有了它,你可以

  • 启动一个模拟器/仿真器
  • 运行 "设置医生",检查是否有遗漏的依赖项
  • 重新加载应用程序
  • 打开应用程序的开发菜单
  • 拍摄应用程序的屏幕截图
  • 拍摄应用程序的视频

使用Flipper插件

这是Flipper区别于其他调试工具的特点。Flipper是可扩展的。你可以通过点击左边的第二个标签,也就是有方块的那个,来进入插件菜单。

如果你点击安装 菜单,需要一段时间才能显示出可用的插件。它没有一个加载指示器,所以只要有耐心,它们最终会显示出来。在那里,你可以通过点击一个按钮来安装插件,或者从底部的表格中选择本地插件路径。

Flipper Plugins

以下是目前可用的一些插件。

  • LeakCanary:这已经是标准插件的一部分,但你必须在你的应用程序中添加对它的支持
  • 数据库:这个插件也预装在桌面应用程序中,但需要更多配置。它为你提供了一个基本的GUI,对你的应用所使用的数据库进行读写访问。
  • React导航:有时我认为React导航是一个伟大的软件包,但有时我希望它能不那么复杂。这个插件将帮助你弄清楚为什么你的导航没有像你期望的那样行动。
  • 重新选择:这个插件将告诉你你的选择器在做什么
  • 性能:测量和监控你的应用程序的性能
  • React Query:在React Native中为你提供React Query DevTools。
  • Bridge Spy:如果你正在构建本地React Native组件,这个特别有用。

你也可以创建你自己的插件并将其贡献给社区。

用断点进行调试

我已经有一段时间没有用断点来调试JavaScript了,因为console.log ,工作做得很好。React Native是一种不同的动物,断点在那里很好,所以让我们看看如何使用它们。

你需要知道的第一件事是,你必须在你的React Native项目中使用Hermes才能使用断点,除非你涉足半打问题线程,否则你不会自己弄清楚。

但是,在大多数情况下,在你的项目中启用Hermes很容易。它将使你的React Native应用运行得更快,特别是在Android上。我确实遇到了一个我正在使用的软件包的问题,但更新到最新版本后,问题就解决了。我遇到的涉及Hermes的其他问题大多是由第三方软件包的问题引起的。

启用Hermes后,选择**Hermes调试器(RN)**部分,这将加载Chrome开发工具的一个实例。选择 ""选项卡,你将在左边侧栏的 ""下找到你的项目中的文件。它们应该在localhost:8081 文件夹下。

然后,选择你正在处理的文件,点击你想要断点的行号的左边,并运行你的应用程序到那个点。

在这个例子中,我试图弄清楚为什么我从一个端点得到一个401 。我马上发现,当我从共享偏好中获得令牌时,我没有使用await 。我知道令牌是正确的,因为我可以到Flipper中的共享首选项查看器中去检查。

Shared Preferences Viewer in Flipper

结论

如果你在React Native中开发应用程序,没有理由不使用Flipper。你所需要做的就是下载Flipper,安装它,然后运行它。我也认为console.log ,但现在我希望我所有不使用React Native的项目都有Flipper。

The post Debugging React Native apps with Flipperappeared first onLogRocket Blog.