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

提效-点击跳转到源码

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扩展

http://www.xdnf.cn/news/8537.html

相关文章:

  • C++系统IO
  • 电脑C盘清理技巧:释放空间,提升性能
  • 【MySQL】表的内外连接
  • 缓存的更新机制
  • 计算机网络期末复习资料
  • 建筑机械员(建筑施工机械管理人员)考试练习题
  • Gartner《Optimize GenAI Strategy for 4 Key ConsumerMindsets》学习心得
  • Netty学习专栏(四):如何解决粘包/拆包问题及自定义协议的实现
  • 网络安全从零开始(一):基础技能全解析
  • github好玩的工具
  • 车载中央域控制器测试【BCM模块介绍-外灯3】
  • SQL每日一题
  • 【MySQL】CRUD
  • SQL每日一题(4)
  • ae钢笔工具无法编辑形状图层的路径
  • Laravle 证件照排版
  • 预分配矩阵内存提升文件数据读取速度
  • 基于Spring boot+vue的中医养生系统的设计与实现(源码+论文+部署+安装+调试+售后)
  • NodeRAG: 基于异构节点的基于图的RAG结构
  • CSS入门
  • SDL2常用函数:SDL_LoadBMP 数据结构详解与示例
  • python 自动生成不同行高的word
  • 医疗AI项目文档编写核心要素硬核解析:从技术落地到合规实践
  • 集群聊天服务器学习 配置开发环境(VScode远程连接虚拟机Linux开发)(2)
  • MMaDA——开源首个多模态大扩散语言模型
  • 计算机网络(3)——传输层
  • 攻防世界——Web题 unseping 反序列化绕过
  • [Git] 如何进行版本回退
  • Python打卡第35天
  • CloudWeGo-Netpoll:高性能NIO网络库浅析