Skip to main content

Code inspector 代码定位的插件原理是什么?

· 4 min read

Code Inspector 是一款 IDE 自动跳转插件,让你在浏览器中点击元素就能直接跳转到对应的源码位置。核心原理分为 3 步:

  1. 编译期插桩:打包时用 AST 解析,给每个 DOM 元素注入源码位置属性

  2. 运行时监听:浏览器端监听快捷键+点击,从 DOM 取出埋点信息

  3. 本地服务调度:向本地服务发送请求,调用 IDE 命令打开文件并定位

纯编译层实现,零业务代码侵入,兼容 Vue/React/原生,适配主流编辑器。

整体时序图

第一步:编译期 AST 插桩(核心)

作为 Vite/Webpack/Rspack 插件参与打包流程:

  1. 获取源码与路径:打包器把每个模块源码交给插件
  2. AST 解析:对 Vue 模板/JSX 做 AST 遍历,找到每个 DOM 元素
  3. 记录位置信息:记录该元素在源码中的文件路径、行号、列号
  4. 注入自定义属性:编译时给 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 服务:

  1. 接收浏览器请求:拿到 filelinecolumn 参数
  2. 调用 IDE 命令行
    • VS Code:code --goto file:line:column
    • WebStorm:webstorm://open?file=...
  3. 光标自动定位:IDE 打开文件后,直接跳转到对应位置

不同编辑器有不同的唤起协议,插件会自动检测并适配。

极简流程文字版

  1. 编译插桩:打包时用 AST 给每个 DOM 埋入源码位置
  2. 页面监听:按住快捷键点击元素,读取埋点位置
  3. 本地转发:页面把地址传给本地后台服务
  4. IDE 唤起:服务调用编辑器命令,直接跳转到源码行

核心优势

  • 仅开发环境生效,生产自动移除无冗余代码
  • 纯编译层实现,零业务代码侵入
  • ✅ 兼容 Vue/React/原生,适配 VS Code/WebStorm 等主流编辑器

Reference

  1. Code Inspector 官方文档
  2. webpack-vue-code-inspector-plugin GitHub
  3. VS Code 命令行参数