当前位置:首页 > 技术分析 > 正文内容

如何优雅的调试 Vue 项目?(vue3调试工具)

ruisui883个月前 (02-03)技术分析10

调试准备

相关环境:

  • 编辑器:VS Code
  • Node 版本:16.20.x
  • 包管理器:pnpm

调试 Vue 项目

初始化一个 Vue 项目有两种方式,分别基于 Vite 和 Webpack 作为构建工具:

  • 使用 create-vue 脚手架工具,创建基于 Vite 的 Vue 项目;
pnpm create vue

使用 Vue CLI 的 @vue/cli 脚手架工具,创建基于 Webpack 的 Vue 项目;

# 先全局安装 @vue/cli 包
npm i -g @vue/cli
# 再使用 vue 命令创建项目
vue create vue-project

分别来看一下两种方式创建的项目如何调试;

调试基于 Vite 的 Vue 项目

  1. 使用 pnpm create vue 命令创建一个基于 Vite 的 Vue 3 项目,启动服务 pnpm dev


创建调试配置文件 launch.json,添加一个调试配置,


url 改为启动服务后对应的地址和端口,启动调试,会打开一个新的 chrome 窗口实例访问我们指定的 url;

PS:启动调试时,默认打开的浏览器是一个全新的窗口,啥都没有,可以添加 userDataDir 配置来指定用户数据目录,例如userDataDir: false 这样打开的就是使用浏览器默认登录的用户。注意浏览器的用户数据目录有个特点,只能被一个 Chrome 实例访问。

  • 在 App.vue 文件打个断点试试,刷新页面,没问题能断住。

  • PS:
    • 如果发现先打断点再启动调试,先断在了编译后的文件,可以试试先启动调试,再打断点。

    如果启动调试后,第一次能断住,后面刷新网页没断住,有可能是缓存的原因,可以禁用掉缓存,勾选 Network 面板 Disable cache。


    调试基于 Webpack 的 Vue 项目

    1. 使用 vue create vue3-webpack-debug 创建一个基于 Webpack 的 Vue 3 项目,启动服务 pnpm serve


    创建调试配置文件 launch.json,添加一个调试配置;url 改为启动服务时对应的地址和端口,启动调试;


    在 App.vue 文件打个断点,没断住,需要将 vue cli 的 devtool 默认配置
    eval-cheap-module-source-map
    改为 cheap-module-source-map

    // vue.config.js
    const { defineConfig } = require('@vue/cli-service')
    module.exports = defineConfig({
      // 修改 devtool 配置为 cheap-module-source-map
      chainWebpack: (config) => {
        config.devtool("cheap-module-source-map");
      },
      // 省略其他配置
    })

    修改 devtool 原因是,vue cli 默认配置为
    eval-cheap-module-source-map,其中的 eval 会导致映射的模块文件带有 hash 参数,无法在本地找到对应文件;如下图,我们在代码中用 debugger 打断点,发现打开的是一个 App.vue?91a0 文件,这个路径无法映射到本地文件,只能只读,应该把 hash 参数处理掉:


    1. devtool 配置详情参考文档 webpack - devtool

    调试线上代码报错

    这里我们通过关联 sourcemap 文件的方式,将打包后的代码映射回源码进行调试。关联 sourcemap 是通过在文件末尾添加一行注释,例如//# sourceMappingURL=xxx.js.map。但是,在生产部署的代码中,不会将 sourcemap 文件关联在一起,否则源码就会被暴露。

    首先,在打包时需要生成单独的 sourcemap 文件,打包工具都有相应的配置:

    • 对于 webpack,可以通过将 devtool 配置为hidden-source-map来实现。该配置的意思是生成 sourcemap 文件,但不会在代码文件末尾中添加关联注释。
    • 对于 vite,可以通过将 build.sourcemap 配置为 hidden 来实现,其效果与 webpack 配置相同。

    然后需要一个 url 来访问 sourcemap 文件。这里我们在本地 sourcemap 文件所在目录起一个服务 npx http-server . ,这样就有一个本地的 url 能访问到 sourcemap 文件了,接下来就是进行关联操作,有以下几种方式:

    方式 1:开发者工具 - Source 面板中手动关联 sourcemap

    在 Source 面板报错文件中右键添加 sourcemap 将报错文件的 sourmap url 输入,就能映射到源码文件了。但是这种方式页面刷新就得重新添加 sourcemap url。

    • 截图:未关联 sourcemap 的源文件


    截图:添加 sourcemap url 映射到源文件


    方式 2:开发者工具 - Source 面板 - Overrides 修改文件内容关联 sourcemap

    在 Network 面板中,右键报错文件请求选择 Override content,会在 Source 面板中保存一份为本地文件,页面刷新重新请求将会使用该本地文件,因此可以在该报错文件末尾添加 sourcemap url,这样就能映射到源码文件了。

    • 截图:Override content 修改内容


    方式 3:通过 Charles 等抓包工具断点修改响应内容关联 sourcemap

    在 Charles 中勾选报错文件断点,断住时修改 Response,在文件内容末尾处添加 sourcemap url。对比方式 1 的好处就是修改的内容会缓存,跟方式 2 差不多。

    总结

    有效的代码调试无疑是提高开发效率的关键一步,无论是在开发新功能的过程中,还是在定位修复现有问题。通过本文了解了如何调试 Vue 项目,包括基于 Vite 和 Webpack 的 Vue 项目的调试方法,调试其他框架项目应该也差不多。同时也介绍了如何调试线上代码报错,通过关联 sourcemap 文件的方式,将打包后的代码映射回源码进行调试。大家如果有更优的调试方案,欢迎交流!另外推荐神光的前端调试通关秘籍,学到很多。

    扫描二维码推送至手机访问。

    版权声明:本文由ruisui88发布,如需转载请注明出处。

    本文链接:http://www.ruisui88.com/post/900.html

    分享给朋友:

    “如何优雅的调试 Vue 项目?(vue3调试工具)” 的相关文章

    基于archlinux的发行版有哪些?

    Arch Linux 是一个 Linux 发行版,采用滚动更新的模型,这意味着 Arch Linux 不会定期发布新版本,而是持续接收更新和升级,保持系统与最新软件版本的同步。Arch Linux 以其极简主义、简单性和用户定制为中心的特点而闻名,专注于让用户对其系统配置具有完全控制权。然而,它也以...

    「Git迁移」三行命令迁移Git包含提交历史,分支,tag标签等信息

    问题描述:公司需要将一个git远程服务器的全部已有项目迁移到一台新服务器的Gitlab中,其中需要包含全部的提交纪录,已有的全部分支与全部打tag标签,目前此工作已全部迁移完毕,特此记录一下操作步骤环境描述:1. 要迁移的远程Git:Gitblit2. 迁移目的Git:Gitlab3. 暂存代码的P...

    使用cgroup限制进程资源

    这里使用containerd项目中的cgroup包来实现进程资源限制。先写一个耗费一个CPU并且一秒增加10m内存的测试进程package mainimport ( "fmt" "math/rand" "time")func main() { go f...

    摄影后期必看 | PS插件camera raw 16.4教程 | 范围蒙版

    范围蒙版Camera Raw 【蒙版】模块中提供了三个范围蒙版工具,可以通过特定的范围来创建蒙版。此次新增的【范围蒙版】大大加强了acr插件对局部调整的能力。点击下拉小箭头可以看到【颜色范围】,可用于快速选择想要编辑的颜色。快捷键:Shift + C【明亮度范围】,可用于快速选择想要调整的明亮度。快...

    vue v-html动态生成的html怎么加样式/事件

    1、动态生成的html,样式不生效//html 布局 <view v-html="html"> {{html}} </view> //动态生成的元素 <view class="btngo" @tap="handleLink...

    你感动了吗?佳能超规格镜头 RF 24-105mm F2.8深度测评

    如果要你选一支用作多题材创作的挂机镜头,那我相信很多人会选择24-105mm这个焦段的镜头。作为一支可以实现从广角到长焦的变焦镜头,24-105mm有着丰富的焦段选择。只是基于镜头体积以及光学结构上的限制,此前的24-105mm镜头只能恒定在F4的光圈。而佳能打破了这一限制,将实用焦段和恒定光圈完美...