lmk123 / blog

个人技术博客,博文写在 Issues 里。
https://github.com/lmk123/blog/issues
623 stars 35 forks source link

使用 React Devtools 调试浏览器扩展程序里的 React 代码 #81

Open lmk123 opened 3 years ago

lmk123 commented 3 years ago

最近正在用 React 开发新版划词翻译,在调试上遇到了不小的麻烦。

普通的网站项目可以直接安装 React Devtools 提供的浏览器扩展进行调试,但是划词翻译本身就是一个扩展程序,而扩展程序相互之间是访问不到执行环境的,所以我自然也没法用 React Devtools 扩展程序调试划词翻译里的 React 代码。

我本来以为这是没办法解决的,所以只好用 Chrome 开发者工具调试代码,但随着代码逻辑越来越复杂,这样的调试方式就越来越痛苦了——

直到我无意中发现,CodeSandbox 这个网站把 React Devtools 嵌入到网页中去了(见 https://codesandbox.io/s/dk9gj),也就是说,我应该也可以把 React Devtools 嵌入到我的扩展程序中来调试代码!

本来以为我可以造个小轮子了,但没想到官方早就解决了这个问题 :joy:

React Devtools 其实有三种使用形式:

Electron App 形式很适合给浏览器扩展程序来用,简单记录一下使用步骤:

首先,运行 yarn add --dev react-devtools。安装过程中会下载 Electron,国内用户可以在 .npmrc 文件中加一行 electron_mirror=https://npm.taobao.org/mirrors/electron/ 加速下载过程。

然后,在想要调试的代码文件最前面加上 import 'react-devtools'。比如我想调试我的内容脚本的代码,那么改动如下:

import 'react-devtools' // <- 一定要加在最前面

import * as React from 'react'
import * as ReactDOM from 'react-dom'
...

最后开两个终端窗口,一个运行 yarn run dev 启动项目的开发环境,另一个运行 yarn run react-devtools 打开用于调试的 Electron App,过一会儿之后,Electron App 就会显示内容脚本里 React 的组件树了,如果很长时间都没显示,那么可以试一下重新运行 yarn run dev

一些注意事项:

大功告成。