React Dev Inspector, 提升开发效率的神器!

本文 转载自 微信订阅号”豆皮范儿“:https://mp.weixin.qq.com/s/msJqWfhXzLhQgSNQ9jI-zA

背景

  1. 有没有遇到过刚到公司,接手项目就去排bug或者一个小需求,因为项目太复杂,你找不到你要修改的对应文件位置?
  2. 有没有遇到看到别人项目,想看看实现却因为项目结构太深,而花了1个小时以上才找到你想要的地方。

react-dev-inspector就是为了这些目的而诞生的。

image.png

接入

安装

npm i -D react-dev-inspector

使用和配置

import React from 'react'
import { Inspector } from 'react-dev-inspector'

const InspectorWrapper = process.env.NODE_ENV === 'development'
  ? Inspector
  : React.Fragment

export const Layout = () => {
  // ...

  return (
    <InspectorWrapper
      keys={['control', 'shift', 'command', 'c']} // default keys
      ...  // Props see below
    >
     <XXXContent>
     </XXXContent>
    </InspectorWrapper>
  )
}

可以自定义开关键值,或者在devtool里面通过window.REACT_DEV_INSPECTOR_TOGGLE()开启

<Inspector> 组件属性

ts类型定义文件在 react-dev-inspector/es/Inspector.d.ts

Property Description Type Default
keys inspector toggle hotkeys

supported keys see: https://github.com/jaywcjlove/hotkeys#supported-keys | string[] | ['control', 'shift', 'command', 'c'] |
| disableLaunchEditor | whether disable click react component to open IDE for view component code

(launchEditor by default only support be used with react-dev-inpector plugins in dev) | boolean | false |
| onHoverElement | trigged while inpector start and mouse hover in a HTMLElement | type ElementHandler | - |
| onClickElement | trigged while inpector start and mouse click on a HTMLElement | type ElementHandler | - |

umi3插件

// .umirc.dev.ts

// https://umijs.org/config/
import { defineConfig } from 'umi'

export default defineConfig({
  plugins: [
    'react-dev-inspector/plugins/umi/react-inspector',
  ],
  inspectorConfig: {
    exclude: [
      'xxx-file-will-be-exclude',
    ], 
  },
})

webpack插件

import { inspectorChainWebpack } from 'react-dev-inspector/plugins/webpack/config-inspector'

inspectorChainWebpack(webpackConfigChain, { exclude: ['xxx-file'] })

示例

代码: https://github.com/zthxxx/react-dev-inspector/tree/master/site

演示: https://react-dev-inspector.zthxxx.me

原理

1. 如何跳转到指定文件的line?

  • react官方浏览器插件有相关能力,可惜他会跳转到chrome source中,利用的是v8的api,inspect(xxx), 这里显然不是我们想要的结果

  • 最简单来说,在create-react-app中,当出现错误后,会出现一层error overlay,点击对应的错误栈,就会跳转到对应的地方

  • 通过查看对应源码,在react-dev-utils中能找到对应的详细实现。

  • 以vscode为例子,就是在错误栈找到相关信息,在dev server层增加一个createLaunchEditorMiddleware,点击后在middleware层执行 code xxx.js的指令就可以,详细指令可以查看相关文档

2. 如何获取到react组件的相关信息

  • 这里采取的方案是webpack loader。通过ast遍历,获取相关JSXOpeningElement的相关file,line,column信息。把这些信息绑定在了指定dom的data attributes上,这样你在hover或者click的时候就能获得对应组件的相关信息了。

  • 查找组件的displayName,这里利用react fiber架构在dom上绑定__reactInternalInstance$属性的特点,通过其type.displayName获取组件的displayName,如果找不到则递归找其return父组件

结语

github项目地址,欢迎大家试用,提issue,pr.

字节跳动数据平台前端团队,在公司内负责大数据相关产品的研发。我们在前端技术上保持着非常强的热情,除了数据产品相关的研发外,在数据可视化、海量数据处理优化、web excel、sql编辑器、私有化部署、工程工具都方面都有很多的探索和积累,有兴趣可以与我们联系。对产品有任何建议和反馈也可以直接找我们进行反馈 ~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容