LocatorJS接入

起因

入职后发现所在团队的项目内没有接入LocatorJS。

这种快速定位页面元素源代码位置的工具对于新人来说用处很大,所以我准备在团队的项目中接入 LocatorJS。

准备接入

我采用的是直接安装Chrome插件的形式,这种方式对于项目的改动比较少,LocatorJS官网可以直接下载此插件。安装完成以后,在本地运行React项目,打开浏览器即可在项目中尝试插件效果。

另外,项目中我们还需要加入@babel/plugin-transform-react-jsx-source 这个包。

浏览器插件安装完成,试用过程中发现项目中元素并没有挂载相关信息以供 LocatorJS 使用,明明已经安装完成了@babel/plugin-transform-react-jsx-source,fiber元素上却没有_debugSource。

问题探查

LocatorJS工作过程可以分成下面几步

  1. 识别点击的dom节点

  2. 通过dom节点找到fiber

  3. 拿到fiber上挂载的 _debugSource 源码位置信息

  4. 打开vscode,通过拿到的位置信息打开对应文件定位位置

所以,_debugSource没有挂载成功是阻塞 LocatorJS 工作的原因。

@babel/plugin-transform-react-jsx-source

打开babel官网,可以找到@babel/plugin-transform-react-jsx-source的介绍。咦,上面说@babel/plugin-transform-react-jsx-source已经包含在@babel/preset-react这个预设内,那是不是不需要重复安装@babel/plugin-transform-react-jsx-source?

@babel/preset-react

@babel/preset-react确实可以看到在runtime为classic的模式下,是包含@babel/plugin-transform-react-jsx-source。不过在v7.9.0版本以后,runtime为automatic模式下,会导致@babel/plugin-transform-react-jsx-source无法工作。

我们团队的项目中现在基本都是将@babel/preset-react的runtime设置为automatic,这样我们不必在jsx文件中显式引入React,babel会帮我们做这个工作。

问题解决

既然@babel/preset-react的runtime为automatic模式会跟@babel/plugin-transform-react-jsx-source冲突,那只要将将automatic改成classic,我们的问题好像就解决了。

如果@babel/preset-react的runtime改成classic,babel将不会在jsx文件中自动引入React类。我们需要排查项目中的每一个文件,需要手动补全每个文件中React的引入,做的事情好像不多,但是需要改动的文件很多,容易漏掉一些文件,所以我们希望能使用一些工具去进行一些自动化处理。

自动补全React引入,我写了一个babel plugin,不过在写完以后,发现已经有成熟的npm包了babel-plugin-auto-import-react,就当练习一下babel plugin喽。

如有问题,请随时联系我。

相关推荐
aoi2 个月前
Babel 示例插件:处理 AST 替换变量、箭头函数
javascript·babel
文艺理科生5 个月前
Webpack项目构建入门:babel的核心角色
前端·webpack·babel
阿镇吃橙子5 个月前
由浅入深 ——Vite工具链学习总结
vue.js·vite·babel
总之就是非常可爱5 个月前
提升前端开发效率:利用 Babel 实现 JavaScript 文件的定制化修改
前端·babel
月下点灯5 个月前
小白也能看懂的AST抽象语法树+babel插件开发教程
前端·javascript·babel
let_code6 个月前
Babel
前端·babel
ichimaru_xx6 个月前
node前端工具实战-svg引入整理工具
node.js·babel
每天写一个BUG6 个月前
简单玩一玩 Babel
前端·babel·前端工程化
喜欢踢足球的老罗6 个月前
一个H5页面中直接使用React的示例与说明
前端·react.js·前端框架·babel