1. 先把话说清楚:Vue devtools 到底该不该装
如果你正在写 Vue 项目,却还在靠console.log和debugger一行行猜数据,那这篇内容就是给你写的。Vue devtools 是 Vue 官方维护的一套浏览器调试扩展,装到 Chrome 里之后,会多出一个专门给 Vue 用的调试面板,能直接看到组件树、props、data、computed、Vuex/Pinia 状态、路由信息,甚至能在线改数据看视图立刻响应。它解决的核心问题就一个:把"黑盒"里的组件状态摊开来给你看,而不是靠打印日志去反推。这篇教程我按照真实安装顺序来写,从版本匹配、应用商店安装、离线 crx 安装、源码构建,到后面面板怎么用、图标灰了怎么办,全部走一遍,新手可以直接抄作业,有经验的可以跳到故障速查那节对号入座。
我见过太多同事,项目都上线两轮了,还在用最原始的方式排查一个v-if为什么不生效。说句实在话,工具没到位,问题不会变少,只会变成你加班的时间。Vue devtools 属于那种"装上就回不去"的东西,十分钟的投入能换回后面几百个小时的调试效率。
1.1 没有它的时候,调试一个列表页有多难受
拿一个很常见的场景举例:一个订单列表页,父组件传list下去,子组件里根据每一条的status决定按钮显示什么文案,同时还有一个computed在算总金额,一个watch在监听筛选条件变化重新请求接口。现在需求方说"金额算错了"。
没有 devtools 的时候,你的操作路径大概是:在计算属性里加一行console.log,刷新页面,控制台翻了三百行找到那条输出,发现值是对的,于是怀疑是子组件里的status判断有问题,再往里加日志,刷新,再翻。一轮下来五分钟,而这个页面可能有十几层嵌套组件。更麻烦的是,有些数据只在特定交互后才出现,你刷新页面那一瞬间的状态就丢了。
有了 devtools,你直接在 Components 面板里点开组件树,找到那个子组件,右侧属性区里props、data、computed全部列出来,鼠标悬停就能看到当前值。发现不对,双击就能改,视图立刻跟着变,几秒钟就能确认"到底是数据源错了,还是渲染逻辑错了"。这就是差距,不是快一点点,是量级上的差别。
1.2 它和 Chrome DevTools 是什么关系
这一点很多人一开始会搞混。Chrome 自带的那套开发者工具(按 F12 或者右键"检查"打开的)是浏览器层面的,能看网络请求、DOM 结构、CSS 样式、内存、性能。Vue devtools 是挂载在它上面的一个扩展面板,安装完成后你会看到顶部标签栏多出 "Vue" 这一项,和 Elements、Console、Network 并排。
这个设计其实挺聪明:浏览器底层能力交给 Chrome 原生工具,框架层面的语义(哪个是组件、哪个是 props、哪个是状态管理里的 mutation)交给框架自己的扩展。所以你调试一个页面,通常是两边来回切:网络问题看 Network,样式问题看 Elements,数据流和组件状态问题看 Vue 面板。搞清楚这个分工,你就不会去 Vue 面板里找接口返回的原始 JSON 了——那东西在 Network 里。
1.3 谁最需要这篇内容
三类人特别值得花时间把这件事做扎实。第一类是刚入门 Vue 的朋友,组件通信、响应式这些概念还在建立阶段,可视化面板能帮你把抽象概念具象化——你能"看见"数据从父组件流到子组件,比看书上画箭头图有用得多。第二类是接手老项目的人,尤其是那种前后端分离、后端用 Spring Boot、前端用 Vue 的项目,代码不是你写的,组件层级又深,devtools 是你快速摸清结构的最快路径。第三类是团队里负责搭环境、写文档的人,装扩展这件事看起来简单,但版本不匹配、商店打不开、扩展权限没开这些小坑,会在每个新同事入职时重复出现一遍,不如一次性写成一份内部说明。
2. 装之前必须确认的三件事
我踩过的坑里,至少一半是因为"上来就装",装完发现面板是空的,然后开始怀疑人生。其实只要在动手前花两分钟确认三件事,后面能省掉大量折腾。这三件事分别是:项目跑的是 Vue 2 还是 Vue 3、Chrome 是什么版本、你打算走哪条安装路线。
2.1 你的项目跑的是 Vue 2 还是 Vue 3
这不是废话,是决定你装哪个扩展、装哪个版本的关键。Vue 2 和 Vue 3 的内部实现差异很大,Vue 3 的响应式系统改成了基于Proxy实现,脱离了原来Object.defineProperty那一套,所以调试扩展读取组件实例的方式也变了。官方在扩展版本上做过区隔:较老的 5.x 系列主要面向 Vue 2,6.x 及之后的版本能同时识别 Vue 2 和 Vue 3,运行时自动判断。
怎么确认项目版本?打开项目根目录的package.json,看dependencies里的vue字段:
{ "dependencies": { "vue": "^2.7.16" } }或者:
{ "dependencies": { "vue": "^3.4.21" } }如果显示^2.x,就是 Vue 2;^3.x就是 Vue 3。还有一种情况是项目里根本没直接列vue,而是用了@vue/composition-api之类的,那大概率是 Vue 2 项目在往组合式 API 迁移。
顺手提一句,Vue 2.7 是个特殊的版本,它把组合式 API 内置了,很多人以为是 Vue 3,其实是 Vue 2 的最后一个次版本。这种情况装 6.x 的扩展是没问题的。
2.2 你的 Chrome 是哪个版本、什么内核
Vue devtools 的 6.x 和 7.x 依赖了较新的浏览器扩展 API(Manifest V3 相关的能力),Chrome 版本太老会直接装不上,或者装上了加载失败。查看版本很简单:地址栏输入chrome://version,第一行就是版本号。
我列一个大概的对应关系,方便你判断:
| Chrome 主版本 | 扩展加载情况 | 说明 |
|---|---|---|
| 100 以上 | 正常 | 支持 Manifest V3,推荐区间 |
| 88 - 99 | 多数可用 | 部分新版本扩展会提示不兼容 |
| 88 以下 | 大概率失败 | 建议升级浏览器而不是降级扩展 |
| 109 系列 | 正常但功能受限 | 该版本是部分老系统的末期支持版本 |
关于 109 这个版本,我这里多说一句。它在一段时间里是某些旧操作系统能拿到的最后一个大版本,很多公司内网机器还停留在这一版。109 本身是支持扩展的,只是如果你装的是最新版扩展,可能会碰到 API 不兼容的提示。这种环境下,选一个稍早的扩展版本会更稳。
另外要区分"Chrome 浏览器"和"基于 Chromium 内核的其他浏览器"。后者理论上也能装 Chrome 商店的扩展,但扩展面板写法、路径可能不一样,如果公司规定只能用某个特定浏览器,先确认它是否开放了"加载已解压的扩展程序"这个入口。
2.3 三条安装路线的取舍对比
到这一步你已经知道自己的项目版本和浏览器版本了,接下来是选路线。市面上其实就三条路:应用商店直接装、离线 crx 加载、源码自己构建。三条路各有各的适用场景,我把差异整理成表:
| 路线 | 耗时 | 更新方式 | 适合谁 | 主要缺点 |
|---|---|---|---|---|
| 应用商店安装 | 3-5 分钟 | 自动 | 绝大多数人 | 商店页面打不开时无法使用 |
| 离线 crx / 解压目录 | 10 分钟 | 手动 | 内网环境、固定版本需求 | 需要手动更新,权限提示较多 |
| 源码构建 | 30 分钟以上 | 手动 | 想用 Beta 特性、想提 issue | 需要 Node 环境和构建知识 |
我的建议很明确:能用商店就用商店,这是最省心的路。只有在内网限制、商店打不开、需要锁定某个特定版本这几种情况下,才考虑后两条。下面分节展开说。
3. Chrome 应用商店安装:最省事的十分钟
这条路是我推荐的默认方案,全程基本都是点几下鼠标。但有两个细节不注意,会出现"装是装上了,但一直不生效"的情况,后面会讲到。
3.1 找到正确的那个插件
打开 Chrome,访问chrome://extensions/,这个页面是你后面所有扩展操作的大本营,建议直接加书签。右上角有一个"开发者模式"的开关,先把它打开——很多人以为这只有离线安装才需要,其实开着它,后面查看扩展 ID、加载解压目录、看错误日志都会方便很多。
然后去商店搜索。这里要注意关键词:直接搜 "Vue.js devtools" 比搜 "Vue devtools" 更容易命中原版。搜索结果里你会看到名字里带 "Vue.js devtools" 的条目,图标是那个绿色的 V 字。作者一栏应该是官方团队,下载量通常在百万级别。如果你看到下载量只有几千、图标颜色怪怪的、名字拼写有细微差别(比如多了个空格或者写成 "Vue DevTool"),那就得多留个心眼,扩展这东西权限很大,能读你所有页面的内容,来路不明的不要装。
商店里通常还会有个名字后面带 "(beta)" 的条目,那是预览版,会先上一些实验性功能,但稳定性差一些。日常开发用正式版就够了。
3.2 安装之后必做的两步设置
第一,安装完回到chrome://extensions/,找到刚装的这个扩展,确认它是启用状态。然后点开详细信息,往下翻,找到一行叫"允许访问文件网址"(英文界面是 "Allow access to file URLs")的开关。如果你调试的是本地直接双击打开的 HTML 文件,比如一个用 CDN 引入 Vue 的演示页,这个开关不开,devtools 永远识别不到 Vue。这个坑我见过太多人中招,因为大部分教程都不会提。
第二,把扩展图标固定到工具栏。点浏览器右上角那个拼图形状的图标,找到 Vue.js devtools,点旁边的图钉。固定之后,当你打开一个 Vue 页面,图标会亮起来;如果是普通网页,图标是灰的。这个视觉反馈非常有用,能让你一眼判断"当前页面到底有没有跑 Vue"。
顺便说一个和账号同步有关的点:如果你登录了账号并开启了同步,扩展通常会自动跟着账号同步到其他设备,换电脑时不用重新装。但注意,通过"加载已解压的扩展程序"方式装的扩展一般不会参与同步,这也是离线方案的一个隐性成本。
3.3 怎么验证它真的生效了
验证方法很直接:打开你正在开发的项目页面(开发服务器的地址,通常是http://localhost:端口),按 F12 打开 Chrome 开发者工具,看顶部标签栏里有没有出现 "Vue" 这一项。有,说明扩展已经注入成功。
点进去,你应该能看到左侧是组件树,根节点一般是Root,下面挂着你项目里的App和一堆子组件。随便点一个组件,右侧会显示它的props、data、computed、setup等信息。
如果标签出现了但内容是空白的,或者顶部图标是灰的,别急着重装,先看第 7 节的排查部分——九成是生产构建或者扩展权限没给全导致的,重装解决不了问题。
注意:如果你打开的是打包后部署到线上的页面,默认情况下 Vue 会关闭 devtools 支持,面板里什么都看不到。这是正常设计,不是扩展坏了。
4. 离线 crx 与解压目录安装:商店打不开时的备份方案
内网环境、公司网络策略限制、或者需要给一批机器统一装同一个版本,这时候离线方案就是刚需。这条路的原理很简单:扩展本质上就是一个带manifest.json的文件夹,打包成.crx文件方便分发,我们只要把它还原成文件夹,让浏览器加载就行。
4.1 crx 文件怎么拿、怎么判断能不能用
来源一般是两种:从一台已经装好的机器上把扩展目录拷出来,或者从项目发布页下载.crx包。拿到文件后,先确认它是不是真的能用。在 Chrome 里直接下载.crx有时会被拦,提示"这种类型的文件可能会损害您的计算机",这是浏览器的安全策略,不是文件真的有问题,但你需要确认来源可靠再继续。
一个快速判断文件有效性的方法是看文件头。.crx文件的前四个字节是魔术字Cr24,后面跟着版本号。在 Linux 或者 macOS 上可以用:
xxd -l 32 vue-devtools.crx如果开头是4372 3234(也就是 ASCII 的 "Cr24"),说明文件结构是对的。
现代 Chrome 已经不再支持直接把这个文件拖进扩展页面安装了,会提示"无法从该网站添加应用、扩展程序和用户脚本"或者"此扩展程序可能已损坏"。所以我们必须解包。
4.2 加载已解压的扩展程序完整步骤
解包这件事,.crx本质上就是压缩包前面加了一段文件头。老版本(CRX2)和 CRX3 的头长度计算方式不同,用一个简单的 Python 脚本处理最稳妥:
import struct import sys src, dst = sys.argv[1], sys.argv[2] with open(src, 'rb') as f: data = f.read() if data[:4] != b'Cr24': raise SystemExit('文件头不是 Cr24,这不是标准的 crx 文件') version = struct.unpack('<I', data[4:8])[0] if version == 3: header_len = struct.unpack('<I', data[8:12])[0] offset = 12 + header_len elif version == 2: pubkey_len, sig_len = struct.unpack('<II', data[8:16]) offset = 16 + pubkey_len + sig_len else: raise SystemExit(f'不认识的 crx 版本: {version}') with open(dst, 'wb') as f: f.write(data[offset:]) print(f'CRX{version} 解包完成,zip 已写出到 {dst},数据偏移 {offset}')用法是:
python3 unpack_crx.py vue-devtools.crx vue-devtools.zip unzip -d vue-devtools-src vue-devtools.zip解出来一个文件夹,里面应该有manifest.json。这时回到chrome://extensions/,确保右上角"开发者模式"是打开的,点左上角的"加载已解压的扩展程序",选中这个文件夹。加载成功后,扩展卡片会出现在列表里,并且带一个"已解压"的标记。
提示:加载时一定要选包含 manifest.json 的那一层文件夹。如果选错层级,会报"清单文件缺失或不可读"错误。
4.3 这条路线的代价:更新和权限
先说更新。解压加载的扩展不会自动更新,官方发新版本你也不会收到提示。解决办法是:关注项目发布页,需要时重新下载、解包、覆盖文件夹,然后在扩展页面点一下那个刷新图标重新加载。覆盖文件夹后不点刷新,浏览器用的还是旧代码,这个细节别漏。
再说权限。解压加载的扩展在每次浏览器重启后,可能会弹出提示问你是否要保留,或者在扩展列表里显示警告信息。另外,某些企业安全策略会自动禁用来源不明的扩展,如果重启后扩展莫名消失,去chrome://extensions/看看是不是被系统策略拦了。
最后是一个容易被忽视的点:解压目录不要放在临时文件夹或者会被清理的路径下。有些系统会定期清理临时目录,文件一没,扩展直接失效,而且报错信息特别隐晦。放一个固定的、不会被自动清理的目录,比如用户主目录下的一个devtools-extensions文件夹。
5. 从源码自己构建 Beta 版:追新功能的人这么干
这条路不适合所有人。但如果你属于下面两种情况之一,值得一试:一是你想第一时间用上还没发版的新功能,二是你在使用中发现了 bug,想确认是不是最新代码里已经修了。构建过程对熟悉前端工程的人来说不复杂,但会卡在几个地方。
5.1 源码获取与依赖安装
先把代码拉下来。国内环境下github.com的访问速度可能会有波动,如果卡住可以多试几次或者配置镜像。拉下来之后进目录:
git clone https://github.com/vuejs/devtools.git cd devtools这个仓库用的包管理器是 pnpm,不是你习惯的 npm。为什么要用 pnpm?因为这是一个 monorepo,里面拆了很多子包(shell 外壳、api 通信层、各框架适配层等),pnpm 的工作区机制能把这些包用软链接关联起来,改一个包另一个包立刻能感知到。用 npm 装会出现各种"找不到模块"的问题。
先确认有没有 pnpm:
pnpm -v没有的话装上:
npm install -g pnpm然后装依赖。这一步是耗时大户,网络不好的话等十几分钟很正常:
pnpm install装完如果看到一堆 peer dependency 的黄色警告,一般可以忽略;只有红色 error 才需要处理。
5.2 构建产物与加载
执行构建:
pnpm run build构建完后你要找的是 shells 那一层里的产物目录,不同大版本路径会有调整,通常在packages/shell-chrome/dist或者类似位置。判断方法很简单:找那个里面有manifest.json的文件夹,就是它。
然后还是老流程:chrome://extensions/→ 开发者模式 → 加载已解压的扩展程序 → 选中这个目录。
有一个小技巧:如果你同时装了商店版,两个扩展的 ID 不一样,可以共存。调试项目时想用哪个就在扩展页把另一个临时关掉,避免两个面板抢同一个页面。我一般会把源码版单独留在一个独立的浏览器用户配置里,免得互相干扰。
5.3 这条路最容易卡在哪里
第一是 Node 版本。这个仓库对 Node 版本有要求,太老会报各种语法错误。用node -v看一下,建议在 18 以上。如果你机器上有多个项目要求不同 Node 版本,用版本管理工具切一下最省事。
第二是构建报内存不足,尤其是 Windows 机器上,报JavaScript heap out of memory。解决办法是临时调大内存上限:
export NODE_OPTIONS=--max-old-space-size=4096 pnpm run build第三是构建成功了但加载后面板报错。这种情况先打开扩展页面,这个扩展卡片上如果有"错误"按钮,点进去能看到具体的异常堆栈,八成是某个子包没构建成功。回头单独构建那个包,或者干脆删掉node_modules重装一次。
6. 面板里的每个标签页到底怎么用
装好了不会用,等于白装。这一节我把几个主要面板讲一遍,都是日常开发里用得最多的。
6.1 Components:改数据、看 props、定位组件
这是使用频率最高的一个面板。左侧是组件树,层级和你的实际组件嵌套完全一致。树上有几个视觉提示要注意:组件名前面带图标的,说明这个组件当前有状态;灰色的表示当前没被渲染。
选中一个组件后,右侧面板分成几块:
- props:父组件传进来的数据,这里改了视图会立刻变,但要注意这是"临时改",刷新就还原了。用它验证"换个值渲染对不对"特别快。
- data / setup state:组件自己的响应式数据。Vue 3 用
<script setup>写的变量会出现在setup这一组下。 - computed:计算属性的当前值和依赖。
- inspect:鼠标悬停能直接跳到 Elements 面板里对应的 DOM 节点,这个联动非常实用。
还有一个我特别常用的操作:面板右上角有个眼睛图标,点开可以把组件名显示到 Elements 面板的 DOM 树里。这样你在改样式的时候,能一眼看出这段 DOM 属于哪个组件——接手老项目时,这个功能能帮你把"页面上一块区域"和"代码里一个文件"快速对应起来。
注意:面板里改的数据不会写回源码,也不会触发后端请求。它只改内存里的运行时状态,刷新页面就恢复。这一点新手容易误解,以为是改了代码。
6.2 Vuex / Pinia / Router:状态和路由的实时视图
如果你的项目用了状态管理,会多出对应的面板。Vuex 面板会列出所有 module、state、getters、mutations,最有用的是它记录了 mutation 的调用历史,可以像时间旅行一样点回某一次状态。调试"为什么这个值莫名其妙变了"的时候,这个历史记录是神器——你能清楚地看到是哪次 mutation 改的,以及改动前后的值。
Pinia 的面板类似,但展示的是各个 store 的定义和当前状态。Vue 3 项目现在多数用 Pinia,面板里每个 store 是独立一块,展开就能看。
Router 面板列出当前的路由表、当前激活的路由、以及路由参数。当你调试动态路由参数(比如/user/:id)取不到值的时候,看一眼面板里的params和query,比在代码里打印快得多。
6.3 Timeline 与 Settings:性能排查和那些开关
Timeline 面板记录了一段时间内的组件事件、性能事件、路由跳转。它的用法是先点录制,操作页面,再停止,然后回放这段时间里发生了什么。排查"点一下按钮触发了十几次重渲染"这类问题上很有用。
Settings 里有几个开关值得调:
| 设置项 | 作用 | 我的建议 |
|---|---|---|
| 主题 | 面板深浅色 | 跟随系统即可 |
| 在 Elements 面板显示组件名 | 便于定位 | 建议开启 |
| 性能监测 | 显示渲染耗时 | 只在排查性能时开 |
| 组件排序 | 按名称或按更新时间 | 大项目建议按更新时间 |
7. 图标灰了、面板空了:故障速查
这一节是我最想写的部分,因为它们是我在真实项目里反复遇到的问题,而且大部分教程不会细讲。
7.1 "Vue.js not detected" 的六种成因
看到这个提示,按顺序排查下面六条,基本能全覆盖:
第一种,页面跑的是生产构建。打包后的代码里 devtools 支持被剥离了,这是设计如此。判断方法是在 Network 面板看加载的资源,如果文件名带哈希、体积很小、没有源码映射,那就是生产构建。
第二种,扩展没拿到当前页面的访问权限。到扩展详情里看"网站访问权限",确认不是"仅在点击时"。有些版本默认是点击激活模式,需要你手动点一下扩展图标授权当前站点。
第三种,页面在 iframe 里。很多后台系统主页面套了一层 iframe,扩展只认顶层文档。解决办法是在 DevTools 右上角的下拉框里切换目标 frame,切到那个 iframe 上再看面板。
第四种,页面是本地文件。前面提过的"允许访问文件网址"开关没开。
第五种,扩展装了但没重启页面。扩展是在页面加载时注入的,装完必须刷新一次页面才生效。这是最低级的错误,但发生频率最高。
第六种,项目中存在多个 Vue 运行时实例。这种情况比较少见,通常是打包配置有问题导致 Vue 被打进去了两份,扩展检测到冲突就放弃了。排查方法是看window.Vue相关的信息,或者在打包配置里确认vue被正确 external 或者单独分块。
7.2 面板能开但没数据 / 数据不更新
标签页出现了,组件树却是空的,或者数据看着是上一次的。原因通常是这几个:
一个是页面停留时间太久,扩展和页面的通信断开了。直接刷新页面就行,不用重装。
还有一个是热更新导致的。开发服务器改了代码之后,模块被替换,但扩展那边还挂着旧的组件引用。这时候刷新页面,或者干脆在扩展页面点一下刷新图标重新加载扩展。
第三种情况是浏览器开了很多标签页,内存紧张,扩展的后台被挂起了。关掉一些标签页,或者在扩展管理里看看有没有"此扩展程序已崩溃"的提示。
7.3 其他零碎问题与速查表
除了上面两类,还有一些零散但很典型的问题,我整理成表方便你快速对照:
| 现象 | 大概率原因 | 处理方式 |
|---|---|---|
| 控制台提示不要粘贴不理解的代码 | 浏览器的自我防护提示 | 确认代码来源可信后按提示输入确认词 |
| Network 面板里载荷是对象,右键复制不出去 | 对象类型不支持直接复制 | 展开字段复制,或用 Copy as fetch |
| 在 DevTools 里按 Ctrl+R 后请求记录没了 | 未勾选"保留日志" | 勾上 Preserve log 再刷新 |
| 打包后页面布局错乱,但本地正常 | 样式提取顺序或作用域样式问题 | 用 Elements 面板核对>Vue.config.devtools = trueVue 3 项目里,这个行为由一个编译期标志控制,需要在构建配置里注入。如果用 Vite: 用 webpack 的话,通过 DefinePlugin 注入同名标志: 这里解释一下为什么要用编译期标志而不是运行时配置。Vue 3 的构建过程会做静态分析,把生产环境下用不到的分支直接删掉,这样包体积才小。 8.2 配合 CDP、$vm 和 Console 的骚操作装好扩展之后,你在 Elements 面板里选中一个 DOM 节点,切到 Console,敲 如果你做自动化测试,Chrome DevTools Protocol 是个更底层的手段,可以在脚本里直接发指令控制浏览器,做截图、取 DOM、注入脚本这些事。配合调试场景,你可以写一个小脚本,在特定页面自动打开某个路由、展开某个组件、导出状态快照。这条路前期投入大,但一旦跑通,回归测试和问题复现会省很多事。 还有一个组合技:Vue 面板里改数据 + Network 面板看请求。比如你怀疑"筛选条件变了但请求没发出去",先在 Vue 面板里直接把筛选条件改掉,然后看 Network 有没有新请求。有请求说明是前端逻辑问题,没请求说明是监听没触发,方向一下就明确了,不用来回改代码。 8.3 几个我反复踩过的坑第一个是扩展版本和项目版本不匹配。有段时间我用一个很老的 5.x 扩展去调试 Vue 3 项目,面板能打开但组件树一直是空的。当时排查了半天,怀疑是打包配置问题,最后发现换个扩展版本就好了。所以记住:面板出现但没数据,先想想版本对不对。 第二个是把开发服务器和生产预览搞混。 第三个是多个项目共用浏览器配置文件。同时开着三四个项目标签页,扩展的状态会互相干扰,尤其是用了状态管理面板的时候,容易出现"看到的是 A 项目的数据"。我现在的习惯是给每个大项目单独一个浏览器用户配置,切换成本很低,但省心很多。 第四个是关于组件的 最后分享一个我个人的使用习惯:把 Vue 面板和 Elements 面板并排开着(Chrome 支持在底部再开一个面板),左边改数据,右边看样式变化,中间还能顺手切 Network 看请求。这种布局一旦习惯,调试效率会再上一个台阶。装扩展这件事本身花不了多少时间,真正值钱的是把它用成肌肉记忆——看到一个问题,第一反应是"去 Vue 面板里看一眼",而不是"我再加个 console.log 吧"。 |