Code inspector 代码定位的插件原理是什么?
· 4 min read
Code Inspector 是一款 IDE 自动跳转插件,让你在浏览器中点击元素就能直接跳转到对应的源码位置。核心原理分为 3 步:
-
编译期插桩:打包时用 AST 解析,给每个 DOM 元素注入源码位置属性
-
运行时监听:浏览器端监听快捷键+点击,从 DOM 取出埋点信息
-
本地服务调度:向本地服务发送请求,调用 IDE 命令打开文件并定位
整体时序图
第一步:编译期 AST 插桩(核心)
作为 Vite/Webpack/Rspack 插件参与打包流程:
- 获取源码与路径:打包器把每个模块源码交给插件
- AST 解析:对 Vue 模板/JSX 做 AST 遍历,找到每个 DOM 元素
- 记录位置信息:记录该元素在源码中的文件路径、行号、列号
- 注入自定义属性:编译时给 DOM 节点加上
data-inspector属性
最终生成的 HTML 类似:
<div data-inspector="/src/components/Button.vue:12:4">Click me</div>
第二步:运行时事件监听
插件向页面注入一小段运行时代码:
// 监听快捷键 + 点击
// 默认: Alt+Shift (Windows) / Option+Shift (Mac)
document.addEventListener('click', (e) => {
if (!isShortcutPressed()) return
// 从 DOM 取出源码位置
const info = e.target.dataset.inspector
// 如: "/src/components/Button.vue:12:4"
// 发请求给本地服务
fetch(`http://localhost:xxx/open?file=xxx&line=12&col=4`)
})
第 三步:本地 Node 服务调度
插件在本地启动一个小型 HTTP 服务:
- 接收浏览器请求:拿到
file、line、column参数 - 调用 IDE 命令行:
- VS Code:
code --goto file:line:column - WebStorm:
webstorm://open?file=...
- VS Code:
- 光标自动定位:IDE 打开文件后,直接跳转到对应位置
不同编辑器有不同的唤起协议,插件会自动检测并适配。
极简流程文字版
- 编译插桩:打包时用 AST 给每个 DOM 埋入源码位置
- 页面监听:按住快捷键点击元素,读取埋点位置
- 本地转发:页面把地址传给本地后台服务
- IDE 唤起:服务调用编辑器命令,直接跳转到源码行
核心优势
- ✅ 仅开发环境生效,生产自动移除无冗余代码
- ✅ 纯编译层实现,零业务代码侵入
- ✅ 兼容 Vue/React/原生,适配 VS Code/WebStorm 等主流编辑器