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