背景:维护react项目, 由于项目大量使用了 render props, 并且新人维护项目,存在大量组件不知道是哪个文件渲染的。 对此,开发 babel-plugin-jsxFileAttribut 插件在 dev 模式开启 并且在 dom 信息显示 组件信息。 此插件完成工作大概在一年半前,因为离职换工作,现在开源出来。有好的坑,内推我😊
- 前端开发同学在工作时需要通过浏览器查看页面DOM对应的组件位置信息,很多时候我们都是找到对应的
className或者文字关键字去vscode搜索,进而找到需要改动的组件位置信息 - 开启该插件,可以在控制面板快速查看该
DOM对应的组件信息 (组件名字 & 当前DOM行列信息) - 或者一个同学突然接到一个新需求,要求去改不熟悉的代码,此时这位同学就会通过
className或者文字关键字去vscode搜索,进而找到需要改动的组件位置信息 - 通过关键字去
vscode搜索找到信息,有时候可能会搜到多处,我们会搞不清到底哪一处是我们需要改的 - 现在通过编译时,对
react项目 进行ast注入,会在渲染时携带该DOM的位置信息 (包括组件所在的 位置,该DOM所在的行信息) - 以下配置只限于在
dev环境开启 (prod开启问题也不大,就是显得不太专业,就像sorcemap暴露出去意义,显得不专业) - 开启下面配置之后,在浏览器找到对应需要修改的
DOM,复制其位置,在vscode使用command + p直接 粘贴进去,找到对应的位置即可修改。 - 使用效果参考这篇文章, 通过结合自定义的
loader或者plugin, 实现了点击页面元素唤起vscode - 仓库地址,欢迎
star
效果:
选中DOM信息中的 data-awakeide 的值 并且复制,直接 command + P,值贴入 vscode 即可打开当前被渲染DOM对用组件的 行列信息 (精确到 某一个文件 某一行 某一列), 不需要在通过 className 反找组件。
- 支持单体项目,也支持
monorepo项目
如何接入:
// .babelrc.js 或者 babel.config.js
const isDev = process.env.NODE_ENV === 'development';
const plugins = isDev
? [
...,
['babel-plugin-jsxfileattribute', { userSetPwd: 'platform-web-ui' }]
...,
]
: [...];
module.exports = {
presets: ....,
plugins,
};
配置:
-
babel-plugin-jsxFileAttribut 只支持react 项目,有几个默认属性
isShowAwakeIdeMsg、onlyShowAwakeIdeMsg、showCompleteFilePath、exclude、userSetPwd -
exclude表示排除哪些标签不需要经过此插件 进行AST操作 -
userSetPwd设置此字段含义: 支持monorepo仓库项目 -
isShowAwakeIdeMsg默认是true, 用户传入的isShowAwakeIdeMsg可以覆盖默认的true。该字段表示 是否在DOM中追加data-awakeIde。data-awakeIde表示 当前渲染的DOM所在的组件 具体某一个文件的 某一行 某一列。 -
onlyShowAwakeIdeMsg默认是true, 控制展示在DOM里面的信息。该字段表示 是否在DOM中追加data-line、data-render-file-name。data-render-file-name表示 当前DOM所在的组件file位置信息,data-line表示 当前DOM所在的组件 具体哪一行。 -
showCompleteFilePath默认是false, 该属性表示组件完整的file path,使用详情参考这篇文章 -
注意:
onlyShowAwakeIdeMsg默认传入true,注入在DOM里 只会存在data-awakeIde信息,data-render-file-name、data-line均不展示。