简介:Vue DevTools 6.5.0 是一款专为 Vue.js 应用打造的浏览器开发者调试插件,面向需要排查组件状态、优化渲染性能的前端开发者。资源包共 124 个文件,以 js、png、html 为主,另含 css、json 及构建脚本,整体大小仅 1.74MB,其中 shell-chrome 目录为 Chrome 扩展的构建产物,可被浏览器直接加载。该版本由 Git 仓库安装且未作更改,插件纯净可靠。借助此工具,开发者能实时观察组件树与层级关系,检视 props、data、methods,修改数据以快速验证逻辑,跟踪生命周期钩子执行,并通过性能分析器定位渲染瓶颈。目前已有 243 人学习下载,对希望提升 Vue 调试效率与深入理解框架运行机制的开发者来说,是一款轻量且实用的必备插件。
1. 为什么说 vue 插件 dev-tools 6.5.0 是调试路上的后悔药
调试 Vue 项目时,最磨人的不是逻辑写不对,而是「状态变了但页面没反应」这类黑匣子问题。vue 插件 dev-tools 6.5.0 做的事,就是把这个黑匣子拆开:组件树、props、store 状态、路由信息和渲染时间线全部集中到浏览器开发者工具里,点开面板就能看到当前页面由哪些组件组成、各自的数据是什么,还能直接在面板里改值验证猜想。6.5.0 这个版本对整体 UI 和底层通信做了重构,面板响应更快,对 Vue 2/Vue 3 项目的兼容也更稳。对还靠 console.log 排错的新手,它能省掉大量刷新页面的时间;对要面对复杂线上问题的熟手,它是排查渲染卡顿和状态异常时最顺手的第一站。这篇文章从安装、核心面板、高频问题排查到进阶习惯,完整展开。
2. 安装与接入:在浏览器和本地项目里把 6.5.0 跑起来
2.1 扩展安装与浏览器差异:Chrome、Edge、Firefox 的坑位各不相同
安装本身不难,难点在于装完会不会用。先明确一个概念:如果你在扩展商店里搜「Vue」,结果里会有好几个名字相似的扩展,比如「Vue.js devtools」和「vue-devtools」。我们要用的是官方维护的 Vue.js devtools,版本号属于 6.5.0 所在的 v6 系列。这个系列最大的特征,是把 Vue 2 和 Vue 3 的检测逻辑合并到了同一个扩展里。早年调试 Vue 2 和 Vue 3 需要装两个不同版本,装错版本的结果就是图标永远置灰、面板永远空白,所以这里先记住一个结论:只要是 v6 系列,通常不用再人为区分 Vue 2 还是 Vue 3,扩展会按页面实际运行版本自动切换调试协议。
Chrome 上直接进扩展商店搜索「Vue.js devtools」,按绿色图标安装即可。Edge 更方便,它既支持从 Chrome 扩展商店直接安装,也可以去 Edge 加载项里搜同名扩展。Firefox 用户要注意一个体验差异:Firefox 的扩展更新后往往需要重启浏览器,新版本才会真正生效;Chrome 和 Edge 基本是后台自动更新完,刷新页面就能用。如果你在 Firefox 里装完发现面板表现跟同事不一样,第一步先重启浏览器,别急着怀疑项目代码。
装完之后,第一步不是急着看面板,而是确认扩展处于激活状态。打开任意一个包含 Vue 的页面,看浏览器右上角的扩展图标:如果图标是绿色的、带 Vue 标志,说明当前页面被识别为 Vue 应用;如果图标是灰色,说明扩展没有检测到 Vue。注意,灰色并不代表没装好,最常见的原因是页面用了 Vue 的生产构建,或者扩展装入时页面已经加载完毕、hook 没注入成功。遇到灰色图标,先刷新页面,这是最廉价也最容易被忽略的修复手段。
2.2 本地最小项目验证:确认 DevTools 真的识别了你的 Vue 应用
为了避免在几万人维护的老项目里排查半天「为什么识别不了」,我一般会先用一个最小项目确认扩展本身工作正常。用 Vite 初始化一个 Vue 3 项目,跑起来,看图标变绿,就说扩展没问题,再回头查老项目。
# 创建一个最小 Vue 3 项目用于验证 DevTools 是否可用 npm create vite@latest devtools-check -- --template vue cd devtools-check npm install npm run dev这套命令前半段是 Vite 官方脚手架的标准用法,--template vue指定了 Vue 模板。跑起来后,浏览器打开终端里给出的地址(默认是 http://localhost:5173),此时右上角扩展图标应该变成绿色。这一步的价值在于:它把「扩展问题」和「项目问题」做了隔离。如果最小项目里图标亮了,那问题一定出在你自己的项目环境上,排查方向瞬间缩小。
如果你用的是 Vue 2 老项目,验证方式稍有不同。Vue 2 的 dev 模式默认也会开启 devtools 支持,所以只要项目是用npm run serve或npm run dev起的开发服务,而不是直接双击打包后的 index.html,图标一样会亮。真正会翻车的场景是用file://协议打开打包产物,这时 Vue 以生产模式运行,devtools 被关闭,扩展自然检测不到。如果你确实需要本地静态文件调试,记得在扩展管理页把这个扩展的「允许访问文件 URL」权限打开。
如果图标亮了但你还是不放心,可以在浏览器 Console 里执行下面这段,直接看当前页面的 Vue 版本:
// 在 Console 里确认页面运行的是 Vue 3 还是 Vue 2 const appEl = document.querySelector('#app'); const vue3 = appEl?.__vue_app__; const vue2 = appEl?.__vue__; console.log(vue3 ? 'Vue 3.x' : vue2 ? 'Vue 2.x' : '未检测到 Vue 实例');这段代码的逻辑是:Vue 3 挂载应用后会在根 DOM 元素上留下__vue_app__引用;Vue 2 则在根元素上挂__vue__。两个都取不到,说明页面要么不是 Vue 写的,要么 Vue 实例挂到了非预期节点上。能输出版本信息,再配合扩展开启,基本就能确定调试链路是通的。
2.3 从源码构建 6.5.0:clone 仓库、安装依赖与手动加载的完整步骤
商店版本永远是稳定版,但如果你遇到两类需求,就得走源码构建这条路:第一,想提前体验下个版本的某个功能;第二,需要改 DevTools 源码做定制,比如过滤某个巨型组件、控制数据采集范围,然后自己打包一个专用版。第二个需求在低代码平台、监控后台这类大型项目里很常见,因为组件树太大时调试面板本身也会卡。我不建议直接改线上跑着的扩展,常见做法是 clone 一份源码,本地构建,再以「加载未打包扩展」的方式接进浏览器。
# 克隆 devtools 源码并构建,本机需要提前装好 pnpm git clone https://github.com/vuejs/devtools.git cd devtools pnpm install pnpm build命令逻辑按顺序讲:git clone把官方仓库整个拉到本地;pnpm install安装依赖,这里没用npm install,是因为这个仓库的官方链路用的是 pnpm,混用包管理器在少数情况下会锁文件冲突;pnpm build会打包出多个平台的产物。构建完成后,终端会打印产物输出路径,常见的浏览器扩展产物位于packages/shell-chrome下的dist目录。如果这个路径在你的环境里有出入,以构建结束时的终端输出为准,它会明确告诉你产物在哪里。
加载步骤固定为:打开chrome://extensions,右上角打开「开发者模式」,点击「加载已解压的扩展程序」,选中上述dist目录。加载后扩展会出现在列表里,和商店版的图标长得一样。注意一点:自建版和商店版不能同时启用,否则两个扩展同时监听 Vue hook,会导致面板数据错乱、时间线重复记录。如果你之前装过商店版,先停用,再加载自建版。
自建版还牵扯到一个「版本漂移」问题:如果团队里有同事用商店版、你自己用自建版,遇到疑似 DevTools 层面的 bug,先确认两边版本一致,再讨论是不是项目代码的问题。这是我从实际项目里总结出来的血泪经验。曾经有同事反馈时间线面板卡死,最后发现是他还在用老版本扩展,面板逻辑和接口跟 6.5.0 已经对不上了。工具版本不一致,排查思路会互相干扰,这点务必在团队里说清楚。
3. 核心面板实战:从组件树、状态管理到时间线的完整调试链路
3.1 Components 面板:组件树、props 查看与修改的边界
当扩展在最小项目上验证通过后,真正实用的是 Components 面板。它的左侧是当前页面的组件层级树,右侧是选中组件的详情,包括 props、data、computed,以及 Vue 3 setup 中声明的 ref 和 reactive 数据。这和 Elements 面板的本质区别在于:Elements 展示的是 DOM 结构,Components 展示的是 Vue 组件逻辑层结构。我一般先看左侧树的结构是否合理——组件层级异常、多了一层无意义的 Fragment、或者某个列表项被整体替换而不是更新,在树形结构里一眼就能看出来。
右侧详情区的核心价值是「临时改值」。比如一个子组件只接收数字类型的 props,页面报错说Invalid prop,你怀疑是父组件传了字符串,但排查代码成本高。在 Components 面板里选中子组件,直接在 props 上把它改成数字,看页面报错是否消失,如果消失就锁定问题在父组件传参。注意,这个修改只是内存中的运行时修改,不影响源码文件,刷新即恢复。这意味着它适合做假设验证,不适合当修 bug 的手段。
改值也存在边界。面板里能改的是组件实例上的响应式数据,但如果你试图改一个 computed 只读属性,或者修改 props 中由父组件控制的值,Vue 会给出警告,或者在下次父组件渲染时把修改覆盖掉。正确姿势是:想测试父组件传参,去父组件改数据源;想测子组件对 props 的消费逻辑,才在子组件里改 props。改 store 数据也一样,应该回到状态管理面板去改,而不是在组件面板里强行改注入的 store 引用。
组件树还有一个实用细节:组件名可读性直接决定排查效率。Vue 3 的<script setup>单文件组件默认拿文件名当组件名,但如果组件是匿名定义的、或者通过循环动态渲染,显示名可能很怪。建议在组件里显式声明 name:
// Vue 2/3 通用:显式声明组件名,让 DevTools 组件树更易读 export default { name: 'OrderDetailModal', props: { visible: Boolean } }在 Vue 3 的<script setup>里,可以用defineOptions({ name: 'OrderDetailModal' })达到同样效果,前提是项目 Vue 版本在 3.3 以上。组件名清楚后,排查时报错信息里指向的组件和 DevTools 树里看到的名称能对上号,省掉大量对应时间。
3.2 状态管理面板:在 Vuex/Pinia 数据流里定位状态变更
如果项目接入了 Vuex 或 Pinia,DevTools 会动态增加对应的状态管理标签页,没接入就不显示。这个动态特性容易被忽略,因为它直接影响预期:如果你写的项目没装 Pinia,却翻遍面板找 Pinia 标签,那是找不到的。Vuex 面板的核心功能是查看 state、查看 mutation 提交历史、触发 mutation 并跟踪状态变化。Pinia 面板则更接近 store 的实时快照:state、getters、actions 都在同一页里展示。
用 Vuex 面板定位「状态改了但页面没变」这类问题,顺序是:先看 mutation 列表里有没有对应记录,没有说明根本没触发;有记录但页面没变,说明问题在视图层,比如 computed 依赖写错、v-if 拦截、或者子组件拿到了旧引用。时间线里的 mutation 和 action 是按时间顺序排列的,你可以展开某一条记录,看它提交前后的 state 差异。这个能力对定位异步问题尤其有用:多个异步请求同时返回时,最后谁覆盖了谁,看提交记录的时间顺序一目了然。
Pinia 项目调试时,我最常用的是直接在面板里改 store 值。Pinia 的 store 本质是 reactive 对象,在面板里改 state,页面会立即响应。这和组件面板改数据一样,只影响运行时状态。但有个差异要注意:Pinia 的 getters 是只读的,actions 是函数,面板里能看到但改不了,强行赋值不会生效。如果你要验证某个 action 的逻辑,去应用的业务代码里触发,再回面板观察状态变化。
真正花时间的坑是「监听不到变更」:如果 store 里存的数据不是常规对象,而是new Map()、new Set()或带循环引用的结构,部分版本的序列化逻辑会出问题,面板里显示的数据要么不全、要么直接不更新。6.5.0 对这类数据结构已经优化不少,但遇到深层嵌套的 class 实例,我还是建议先把数据简化成纯对象再放进 store。这不仅是调试需要,也利于持久化和跨端传递。
3.3 Timeline 时间线:把白屏、卡顿还原成具体的渲染事件
Timeline 面板是 v6 系列重构后变化最大的部分,它把组件渲染、store 变更、用户事件三类信息整合到同一条时间轴上。标准用法是:复现一次操作,然后看这段时间里发生了哪些渲染、渲染耗时多长、哪个事件触发了哪一连串更新。定位性能问题的主流思路是:打开时间线 → 开启录制 → 复现卡顿 → 停止录制 → 看最宽的渲染条。
每一步都不复杂,但有一个前提:性能录制通常只对开发模式有效,生产构建下的页面一般不产生这些记录,这点在后面的排查章节会展开。实际操作中,我习惯把 Timeline 面板和浏览器自带的 Performance 面板结合着看:Timeline 告诉你哪个组件渲染了、渲染顺序是什么;Performance 面板告诉你渲染期间 CPU 被谁占了。Timeline 里每一个渲染条都可以点开,能看到触发该渲染的组件、变更类型和关联的事件,这能直接判断「是不是某条父组件更新引发了一整棵子树的重渲染」。
还有一类问题适合用时间线排查:白屏。页面打开后先是一片空白,过一会儿才出现内容,这种通常是某个组件在 mounted 里发起异步请求,数据回来前页面没有可渲染内容。在 Timeline 里录制刷新操作,观察渲染事件是否集中在数据返回之后,之前的空白窗口期是否完全没有渲染条,就能确认是「数据没回来」还是「渲染被阻塞」。这两种问题的解决方向完全不同,前者要改数据请求时机,后者要查同步计算开销。
| 问题类型 | Timeline 表现 | 排查方向 |
|---|---|---|
| 数据未返回 | 空白期无任何渲染条 | 接口请求时机、loading 状态 |
| 主线程阻塞 | 渲染条宽度很大且连续 | 同步计算、组件未拆分 |
| 无效重渲染 | 同一组件高频出现渲染条 | props 引用变化、依赖收集 |
这个表格是我平时排查时的快速对照。看时间线别只盯着有没有异常,先看有没有渲染条,再看条多宽、多密集,这三个信息足够区分大多数白屏和卡顿问题。
3.4 Vue 2 与 Vue 3 项目的面板差异:不同版本该看哪里
v6 系列虽然在一个扩展里兼容 Vue 2 和 Vue 3,但两套运行机制不同,面板呈现的细节也有差异。在 Components 面板里,Vue 2 的 data 展开后直接看到值,methods 和 computed 分区域列出来;Vue 3 的 setup 状态下,ref 的数据在面板里会自动拆成 value 形式,跟模板中的.value使用一致。如果你在 Vue 3 项目里看到一个 ref 类型的字段显示为一整个对象而非具体值,先看看是不是版本太老,或者组件里用了shallowRef这类不触发深层响应式的方式。
Vuex 和 Pinia 的检测也因版本而异:Vue 2 项目普遍用 Vuex,DevTools 出现 Vuex 面板;Vue 3 项目如果集成了 Pinia,出现的是 Pinia 面板。两者一般不会同时出现,除非你在 Vue 3 项目里强行装了 Vuex 4,这时两个面板都能看到,但状态分离,排查时要先确认修改的是哪个数据源。
| 对比项 | Vue 2 项目 | Vue 3 项目 |
|---|---|---|
| 组件数据来源 | data / computed / methods | ref / reactive / computed |
| 状态管理面板 | Vuex mutation 记录 | Pinia 或 Vuex 4 面板 |
| 事件时间线 | 可捕获 emit 事件链 | 部分事件走虚拟 DOM 传递,边界场景有缺失 |
| 组件名展示 | 依赖 name 选项 | 优先 SFC 文件名或 defineOptions |
事件时间线这块值得单独说:Vue 2 里能捕获组件 emit 的事件链,但 Vue 3 中事件机制改为在虚拟 DOM 上传递,部分事件在特定边界情况下不会出现在 DevTools 里。我的经验是:不要在 Vue 3 的复杂组件树下依赖 DevTools 的事件链定位问题,直接看组件的 emit 逻辑更高效。这个差异是 Vue 3 框架层决定的,不是 DevTools 的 bug,理解了就不会白费功夫。
4. dev-tools 6.5.0 排查手册:装不上、连不上、数据不刷新的 5 个实战案例
4.1 扩展图标置灰:页面明明是 Vue 写的,为什么 DevTools 检测不到
现象:浏览器右上角的扩展图标是灰色的,点击后提示检测不到 Vue.js。页面代码确认是 Vue 写的,路由也能正常访问。
原因:按出现频率排序,第一是扩展在 Vue 应用初始化之后才加载,常见于刚安装完扩展没有刷新页面;第二是页面跑在生产构建下,Vue 的 devtools 开关被关闭;第三是页面用 iframe 嵌入了子应用,Vue 实例不在顶层文档上下文里;第四是页面同时存在多个 Vue 全局实例,hook 连接混乱。
解决:按下面的顺序排查。先刷新页面,排除注入时机问题。再确认访问的是开发服务地址,而不是file://打开的打包产物。如果这两步都没解决,在 Console 里执行下面的代码,检查 hook 是否存在:
// 在 Console 里检查扩展 hook 是否注入成功 const hook = window.__VUE_DEVTOOLS_GLOBAL_HOOK__; console.log('Vue hook 存在:', Boolean(hook), hook);如果输出false,说明扩展根本没有注入到当前页面上下文,优先检查扩展权限里是否开启了「允许访问文件 URL」,以及当前页面是否是受限制的浏览器内置页面。如果输出一个对象,但图标仍然置灰,那就是 Vue 生产构建或多实例的问题,去构建配置里把 Vue 运行时换成开发版并检查有没有重复打包。
4.2 组件树空白:iframe、多实例与挂载容器的隐性影响
现象:扩展图标是亮的,点击后能打开面板,但左侧组件列表一片空白,没有任何节点。
原因:最常见的是 iframe 嵌套。现代前端项目里,旧项目嵌新项目、或者嵌套第三方 Vue 子应用的情况非常多,DevTools 默认只监听顶层文档,iframe 里的 Vue 实例信息它拿不到,或者拿到了也找不到对应的面板入口。第二个原因是多实例 Vue:页面宿主用了 Vue 3 运行时,子应用又打包了一份独立的 Vue 副本,两份 Vue 各自建立 hook,DevTools 检测到了其中一份,但面板另一份却没正确响应。第三个原因是挂载容器的时序错位:应用先挂载在某个 DOM 节点上,之后代码又清空或替换了这个节点,DevTools 内部依赖的实例链发生断裂。
解决:iframe 场景下,在新标签页里直接打开 iframe 的地址单独调试,是最省事的方案,比在扩展面板里切上下文要稳得多。多实例场景则需要从构建配置入手,把 Vue 改为 external 或者统一 alias 到同一份依赖路径,让整个页面只存在一个 Vue 运行时。挂载容器被替换的场景,检查代码里是否有innerHTML = ''清空操作,或者app.unmount()之后再次挂载的动作,保持单一挂载点是最稳妥的写法。
4.3 面板数据不刷新:状态修改、只读属性与页面回写之间的博弈
现象:在面板里改了数据,页面没有反应;或者页面里的组件明明已经更新了,但面板里展示的还是旧值。这两种情况经常同时出现,让你分不清面板和页面到底谁才是对的。
原因:第一种情况,大概率是改错了对象——改了只读的 computed,或者改了 props 中由父组件控制的值。第二种情况,往往是数据流回写覆盖:面板修改触发了某个 watch 回调,watch 里又对原始数据做了赋值,页面按新数据渲染了,但面板的展示层还停留在旧快照上。第三种情况是高频更新下的节流现象,比如拖动滑块连续触发 store 更新,面板的渲染跟不上页面频率,显示就会滞后。
解决:先明确修改目标。只想验证 UI 渲染效果,改 data 或 ref;只想验证计算逻辑,去上游改 props。数据回写覆盖的场景,用时间线看事件顺序,确认是不是「面板改值 → watch 触发 → 代码重新赋值」这个链路,然后去代码层面把 watch 里的重复赋值去掉。高频更新场景,先停掉 Timeline 录制,再等面板刷新一次,再读取状态值。面板展示的是接近实时的状态快照,不是每帧都同步的实时流,接受这个设定能避免很多无谓的焦虑。
4.4 Performance/Timeline 无记录:生产构建与录制开关的双重因素
现象:打开了 Timeline 面板,也点了录制按钮,页面操作完成后,时间轴上一片空白,没有渲染条也没有事件。
原因:最关键的原因是页面跑的是生产构建。Vue 3 的生产构建会移除渲染任务追踪相关的 hook,Vue 2 也一样,生产模式下扩展能识别 Vue 版本,但拿不到内部渲染过程数据。第二个原因是录制没有真正开启:Timeline 面板需要手动点击录制按钮,如果你只是打开了面板而没有开始录制,时间轴上是不会有数据的。第三个原因是浏览器差异,Firefox 对部分性能追踪数据的支持不如 Chrome 完整。
解决:先确认项目正在跑npm run dev这类开发命令,而不是预览dist产物。再确认录制按钮处于激活状态,按钮状态通常有颜色变化指示。如果你在两个浏览器里调试同一个项目,性能分析尽量在 Chrome 里做,Firefox 留着做功能验证。这不算扩展的缺陷,是浏览器实现机制不同。
4.5 扩展卡死与闪退:大组件树、高频更新与内存占位
现象:面板打开后 CPU 占用飙升,切换组件时浏览器标签页卡住,严重的时候面板直接白屏或显示崩溃信息。
原因:组件树过大是元凶之一。当某个列表组件渲染了上千行、每行又有十几个响应式数据时,扩展在每次 state 变更后都要对整棵子树做数据采集和结构同步,内存占用会迅速上升。另一个常见的元凶是特殊类型数据:对象里存在 Symbol 属性、函数属性或循环引用时,数据复制逻辑会消耗大量时间。高频更新组件会放大这些问题,比如拖拽排序、画布缩放这类操作,一次手势触发几十次渲染,DevTools 跟着疲于奔命。
解决:第一,打开扩展设置,把组件树的展开深度调浅,关闭不必要的字段预览。第二,从源头降低更新频率,列表用虚拟滚动,组件用v-memo或合理拆分来减少无效渲染。第三,排查循环引用和大对象,把调试时不需要的数据用非响应式方式挂载,或者干脆写一个最小复现页面来验证问题,别在生产级大页面上硬扛。如果面板已经卡死,按最快路径处理:停用扩展,恢复浏览器正常,再重新启用,而不是在卡死状态下反复点击。
5. 从会用工具到会排查:快照对比、兼容开关和版本锁定的三个进阶习惯
5.1 用快照对比在数据流里定位「脏值」
排查一个看起来随机出现的状态异常时,纯靠眼睛盯面板很容易漏。我习惯在复现前保存一份状态快照,再复现操作后对比两份快照。流程是:在状态管理面板里把当前 state 复制出来,复现问题,再取一次 state,用 diff 工具找出变化字段。6.5.0 的状态面板支持直接展开并复制当前状态的数据内容,没有的话,在 Console 里通过应用实例取 store 数据也行。拿到差异字段后,去代码里搜索这个字段的赋值点,通常能定位到脏数据被写入的位置。这个习惯把工具从「看状态」升级到了「找源头」。
5.2 Vue 2 项目手动接管 devtools 的兼容开关
如果你的团队还维护着 Vue 2 老项目,而且出现了扩展识别正常但部分面板拿不到完整数据的情况,可以先确认 Vue 2 的全局配置。标准做法是确保项目跑在开发模式,此时Vue.config.devtools默认为 true。如果某个环境变量把它关了,可以在调试环境临时手动开回:
// Vue 2 项目:在入口文件或调试环境注入处临时开启 devtools if (location.hostname === 'localhost') { Vue.config.devtools = true; }要强调这是调试习惯,不是生产方案。生产环境不要保留这段代码。更稳妥的做法是通过环境变量控制,让 devtools 开关跟随构建环境自动切换,而不是靠手改源码。Vue 3 项目内部机制已经变了,全局配置不再是主要途径,直接保证 dev 模式运行就够。
5.3 把 DevTools 版本写进团队文档:复现环境优先
最后想分享一个很少有人提的习惯:把 DevTools 版本写进团队开发文档。原因很简单,DevTools 一直在更新,不同版本的面板行为、标签名、数据展示逻辑都有差异。当同事说「我这边一切正常」而你说面板卡死时,先别急着争论是不是代码问题,先各报一个扩展版本,很多时候版本不同就是结论。我现在带项目时,会要求团队在docs/debug.md里记录浏览器版本和 DevTools 版本,这比写什么复杂调试流程都实在。
调试工具自己也有版本约束,这话听起来像废话,但在这件事上我真的踩过坑。某次在老项目里排查时间线不显示,折腾了半天,最后发现是扩展自动更新到了 6.5.0,而项目里某个依赖还在按旧版 DevTools 的注入字段做检测,数据通道整个对不上才导致时间线空白。从那以后,我养成了把浏览器、扩展、脚手架三者版本一起记录的习惯。工具的稳定是排查一切问题的基础,希望这篇能帮到你。
本文还有配套的精品资源,点击获取