当前位置: 首页 > news >正文

提效-点击跳转到源码

1、localhost项目

例如【鲸岛】这个中台项目启动地址是localhost。

使用chrome中的【click-to-react-component 】扩展, alt + 鼠标左键 选择dom后跳转到对应文件。

click-to-react-component的原理(来自ai)

click-to-react-component 的工作原理确实很巧妙,让我来解释一下:

  1. React DevTools 集成

// 利用 React DevTools 提供的能力
window.__REACT_DEVTOOLS_GLOBAL_HOOK__
  • 通过 Chrome 扩展机制,获取页面中的 React Fiber 树

  • 可以访问到组件的内部信息,包括源码位置

  1. 源码映射(Source Maps)

// 开发环境下 webpack 会生成 source map
//# sourceMappingURL=main.js.map
  • 利用浏览器开发者工具提供的 source map API

  • 可以将编译后的代码位置映射回源代码位置

  1. DOMReact 组件的映射

// 简化的原理示意
document.addEventListener('mouseover', (e) => {// 获取 DOM 元素对应的 React Fiberconst fiber = getFiberFromDOM(e.target);// 通过 fiber 获取源码位置const sourceLocation = getSourceLocation(fiber);
});

  1. 编辑器通信

// 使用特殊协议打开编辑器
window.open(`vscode://file/${filePath}:${line}:${column}`);

主要区别:

  1. code-inspector-plugin 需要在构建时注入信息

  2. click-to-react-component 利用已有的开发工具基础设施

    1. React DevTools

    2. Source Maps

    3. Chrome 扩展 API

这就是为什么 click-to-react-component 不需要修改项目代码就能工作,因为它巧妙地利用了开发环境下已经存在的这些工具和信息。

2、非localhost项目

比如fs这类电商项目,这里使用 code-inspector 的打包插件。

使用

  1. 安装npm插件

npm install code-inspector-plugin -D 
//其他包版本过低就用命令:  npm install code-inspector-plugin -D --legacy-peer-deps

  1. 在打包中使用这个插件

fs中修改configs/webpack.dev.js


const { codeInspectorPlugin } = require('code-inspector-plugin');plugins: [codeInspectorPlugin({bundler: 'webpack',}),]

  1. 项目启动后用 shift + alt + 鼠标左键 选择组件

原理(来自ai)

让我来解释一下 code-inspector 的核心工作原理:

  1. 编译时注入

  • 通过 webpack/vite 等构建工具的插件系统,在编译过程中为每个组件注入位置信息

  • 主要包含:文件路径、行号、列号等源码位置信息

  1. 运行时定位

// 简化的原理示意
{// 开发环境下会注入类似这样的代码__CODE_INSPECTOR__: {filePath: 'src/components/Button.jsx',line: 10,column: 5}
}

  1. 事件监听

  • 监听组合键(Alt+Shift)的按下

  • 添加鼠标移动事件监听器

  • 在 DOM 元素上显示遮罩层和位置信息

  1. IDE 通信

  • 使用 vscode:// 等协议打开编辑器

  • 通过 URL 参数传递文件路径和位置信息

  • 编辑器接收到请求后定位到对应位置

  1. 开发环境限制

if (process.env.NODE_ENV === 'development') {// 只在开发环境下注入代码plugins.push(['code-inspector-plugin', {bundler: 'webpack'}]);
}

主要优点:

  1. 无侵入性 - 不需要修改源代码

  2. 性能影响小 - 只在开发环境生效

  3. 支持多种框架 - React/Vue/Svelte 等

这就是为什么在你的 babel 配置中需要添加这个插件,它需要在编译阶段注入必要的位置信息。

其他类似的插件

  1. locatorjs,这个插件提供chrome扩展

相关文章:

  • 随机森林(Random Forest)学习
  • java 代码查重(五)比较余弦算法、Jaccard相似度、欧式距离、编辑距离等在计算相似度的差异
  • 正则表达式进阶(四):性能优化与调试技巧
  • Qt基础:数据容器类
  • STC89C52RC/LE52RC
  • Reason-ModernColBERT论文速览:内存受限设置下深度对比学习批量大小的扩展
  • 解决“uv 无法识别为命令”问题:Windows 下 Python 工具安装后的路径配置方法
  • OpenHarmony外设驱动使用 (十四),WLAN
  • 业务设计篇隐私合规检测URL 重定向资源拒绝服务配合项目
  • Spark on YARN 的运行架构总览
  • 数据中台如何设计?中台开发技术方案,数据治理方案,大数据建设方案合集
  • 电子电路:在导电过程中,铜线中的电子为什么不会消失?
  • Python爬虫实战:研究Newspaper框架相关技术
  • 第十六章:数据治理之数据架构:数据模型和数据流转关系
  • 【Excel 扩展正则的能力】工作中赋予处理单元格文本的强大正则表达提取能力
  • 三种常见脉冲神经网络编码方式解读
  • LG-Netty学习
  • c语言和系统的文件接口
  • 21 程序控制语句详解:循环控制(while、do-while、for、循环机制与原理、嵌套循环)
  • lua脚本学习笔记1:Vscode添加lua环境_lua基本语法
  • seo排名工具站长/不限次数观看视频的app
  • vps主机可以做几个网站/陕西seo顾问服务
  • app和网站开发/谷歌海外推广
  • 电影网站源码怎么做的/八八网
  • 做电影网站用什么软件叫什么/百度网站首页入口
  • 门户网站开发的背景和意义/seo公司品牌哪家好