提效-点击跳转到源码
1、localhost项目
例如【鲸岛】这个中台项目启动地址是localhost。
使用chrome中的【click-to-react-component
】扩展, alt + 鼠标左键
选择dom后跳转到对应文件。
click-to-react-component的原理(来自ai)
click-to-react-component
的工作原理确实很巧妙,让我来解释一下:
-
React DevTools 集成
// 利用 React DevTools 提供的能力
window.__REACT_DEVTOOLS_GLOBAL_HOOK__
-
通过 Chrome 扩展机制,获取页面中的 React Fiber 树
-
可以访问到组件的内部信息,包括源码位置
-
源码映射(Source Maps)
// 开发环境下 webpack 会生成 source map
//# sourceMappingURL=main.js.map
-
利用浏览器开发者工具提供的 source map API
-
可以将编译后的代码位置映射回源代码位置
-
DOM 到 React 组件的映射
// 简化的原理示意
document.addEventListener('mouseover', (e) => {// 获取 DOM 元素对应的 React Fiberconst fiber = getFiberFromDOM(e.target);// 通过 fiber 获取源码位置const sourceLocation = getSourceLocation(fiber);
});
-
编辑器通信
// 使用特殊协议打开编辑器
window.open(`vscode://file/${filePath}:${line}:${column}`);
主要区别:
-
code-inspector-plugin
需要在构建时注入信息 -
click-to-react-component
利用已有的开发工具基础设施-
React DevTools
-
Source Maps
-
Chrome 扩展 API
-
这就是为什么 click-to-react-component
不需要修改项目代码就能工作,因为它巧妙地利用了开发环境下已经存在的这些工具和信息。
2、非localhost项目
比如fs这类电商项目,这里使用 code-inspector 的打包插件。
使用
-
安装npm插件
npm install code-inspector-plugin -D
//其他包版本过低就用命令: npm install code-inspector-plugin -D --legacy-peer-deps
-
在打包中使用这个插件
fs中修改configs/webpack.dev.js
const { codeInspectorPlugin } = require('code-inspector-plugin');plugins: [codeInspectorPlugin({bundler: 'webpack',}),]
-
项目启动后用
shift + alt + 鼠标左键
选择组件
原理(来自ai)
让我来解释一下 code-inspector 的核心工作原理:
-
编译时注入
-
通过 webpack/vite 等构建工具的插件系统,在编译过程中为每个组件注入位置信息
-
主要包含:文件路径、行号、列号等源码位置信息
-
运行时定位
// 简化的原理示意
{// 开发环境下会注入类似这样的代码__CODE_INSPECTOR__: {filePath: 'src/components/Button.jsx',line: 10,column: 5}
}
-
事件监听
-
监听组合键(Alt+Shift)的按下
-
添加鼠标移动事件监听器
-
在 DOM 元素上显示遮罩层和位置信息
-
IDE 通信
-
使用
vscode://
等协议打开编辑器 -
通过 URL 参数传递文件路径和位置信息
-
编辑器接收到请求后定位到对应位置
-
开发环境限制
if (process.env.NODE_ENV === 'development') {// 只在开发环境下注入代码plugins.push(['code-inspector-plugin', {bundler: 'webpack'}]);
}
主要优点:
-
无侵入性 - 不需要修改源代码
-
性能影响小 - 只在开发环境生效
-
支持多种框架 - React/Vue/Svelte 等
这就是为什么在你的 babel 配置中需要添加这个插件,它需要在编译阶段注入必要的位置信息。
其他类似的插件
-
locatorjs,这个插件提供chrome扩展