vue 项目调试的三种方法和不同比较

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 之前的一篇文章讲了两种在 vue 项目中调试的方法,一个是在项目源码中手动加入断点(debugger), 然后利用 Chrome 调试,第二种是直接在 Chrome 中打断点调试,但是需要知道怎么找到

之前的一篇文章讲了两种在 vue 项目中调试的方法,一个是在项目源码中手动加入断点(debugger), 然后利用 Chrome 调试,第二种是直接在 Chrome 中打断点调试,但是需要知道怎么找到调试文件,除了这两种方式以外 vue 还存在其他的方法去调试,比如

  1. console
  2. vscode 插件 Debugger for Chrome
  3. 以及前一篇文章介绍的 Chrome 断点调试

本篇文章就针对上面的方法做一些简单的介绍和不同

console

类似 console 这种打印信息的调试方法,几乎每种语言都有,而 JS 也是非常多人在使用,而且也很方便,需要调试的地方就去插入console类的输出语句就可以打印相关的信息,还可以根据不同类型的调试输出不同颜色,不同类型的提示,比如 console.log, console.error, console.info...我基本只用console.log, 其具体使用方式如下

function getData() {
  // ...
  const data = console.log(data); //...;
}

简单的输出你需要的信息,比如你想知道接口返回的数据是什么?有没有返回正确的数据?当发现渲染错误的时候我可能就会去打印一下,其实这种调试思路有点像黑盒测试,不用去管内部实现,就是看用户输入得到的输出是什么

黑盒测试

console 调试还有一个优点就是,打印的数据具有完整的数据结构,类似对象,数组之类的值,可以清晰的看到它的数据结构,像 JS 这种具有复杂引用的语言,可以查看它的原型链,即使是 vue 负责项目的开发中也能帮助我们进一步分析输出,这也是浏览器提供给我们的便利

15.png

当然 console 调试可以有另一种目的,就是日志记录,web 前端在这一块似乎没有太多发展,不过像后端和客户端(Andorid), 都对日志有很多要求和拓展,像我在 SpringBoot 用的很多的 log4j,在前一段时间还因为存在 BUG 影响很大,在参考一些后端 github 库的时候都是有很多日志记录的, console 可以在一些位置进行一定的输出,检测整个环境运行的情况,毕竟一个项目复杂的时候,很多 BUG 是无法复现的,更多的时候可以通过日志去找 BUG, 具体实例参考如下(可能与实际有较大出入,我前端和后端都没有和日志有过太多的了解)

2022年2月18日23点46分 -- xxx 用户登录
2022年2月18日23点46分 -- xxx 用户退出

小结

  • 优点

    • 适用场景广,简单易上手
  • 缺点

    • 需要删除部分 console 语句
    • 复杂逻辑无法调试,不适用于白盒测试

vs code 插件 Debugger for Chrome

这是同类文章经常提到的一个调试方法,因为很多人前端写代码都是用的 vscode(白嫖真香), 没有用 webStorm(没钱氪金), 这点就不像后端,基本都用 IDEA, 甚至连 Android 客户端都有 IDEA 爆改版 Android Studio(Google 大力出奇迹), 不过 vscode 还是挺好用的,像这篇文章也是在 vscode 用的 markdown 插件写的,所以回到这个调试工具 Debugger for Chrome, 它的具体使用方式如下,

16.png

17.png

这种方式是使用 vscode 提供的调试工具调试, vscode 的调试工具还是比较全面的,基本的逐行调试,查看变量值(watch) 什么的都有,而且它的使用让我感觉像是在调试 Java, 像以前 SpringBoot 就是需要重启调试,不是说随时加个断点然后就能马上停止,所以 Debugger for Chrome 的缺点就很明显了,并不能及时复现 BUG, 因为它的调试是重新打开一个 Chrome Tab 页,相当于重启,而重启以后很多调试的环境已经是不存在了,失去了调试的可能

还有一个缺点就是,并不是开箱即用,是需要一点配置的,像我之前使用的话,中间失败了好几次最后才成功,还是有点难上手操作的

小结

  • 优点

    • 能够利用 vscode 原生强大的调试工具
    • 直接在源码上打断点调试
  • 缺点

    • 需要重启环境,部分 BUG 无法复现
    • 需要配置,不是开箱即用

Chrome 中打断点调试

这是我用的比较多的调试方法,直接在 Chrome 中打断点调试,具体使用方法可以参考我之前的文章vue 项目调试你可以这样做

这种方法是基于 source-map 的,依赖于浏览器中和源码的一个映射,通过映射来找到源文件,不过我在使用中发现,我没有配置 source-map 却仍然能够在 Chrome 中找到我的源码映射,难道是我的 vue-cli 版本太高?(我的 vue-cli 版本为 4.5.15), 还有额外的一点就是 vite 也是无需配置 source-map

这里补充一下 vue-cli 和 vite 在浏览器中运行时目录结构的区别

这是 vue-cli 运行时浏览器的目录结构及源码映射位置

18.png

这是 vite 运行时浏览器的目录结构及源码映射位置

19.png

vite 要更清晰一点(所以还不赶紧上手 vite?),但是两个开发工具都可以使用 Ctrl+P 快捷键快速找到源文件

比较

  1. console 适用面更广,适用于黑盒测试场景,还可以用于日志记录,但逻辑内部错误无法调试
  2. Debugger for Chrome 适用于白盒测试,调试时需要重启,具有上手难度,但是可以用 vscode 的调试工具
  3. Chrome 中调试,利用 Chrome 原生的调试工具(Chrome 的其实更专业),内部逻辑错误也能够调试,准确定位 BUG, 开箱即用,随用随调,可以随时打断点并调试,动态调试,但是需要找到源文件
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
4天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
4天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
4天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
3天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
5天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
3天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
|
5天前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
6月前
|
JavaScript API
【vue实战项目】通用管理系统:api封装、404页
【vue实战项目】通用管理系统:api封装、404页
74 3
|
6月前
|
人工智能 JavaScript 前端开发
毕设项目-基于Springboot和Vue实现蛋糕商城系统(三)
毕设项目-基于Springboot和Vue实现蛋糕商城系统