首页 > 其他分享 >调试篇:如何调试vue项目?

调试篇:如何调试vue项目?

时间:2025-01-04 10:36:55浏览次数:3  
标签:vue debugger 项目 断点 config 调试 cli

平时在开发vue项目的时候,会经常用到debugger调试,本期来探究一下,如何调试vue项目。

前置知识和准备

1、如何打断点?

断点分为很多种,比如普通断点条件断点DOM断点异常断点等等,我这里主要介绍下怎么打最常用的普通断点。

方式一:通过debugger

function test() {
  debugger;
}

在代码中直接加一行debugger,就增加了一个打断点,注意如果要在浏览器中让断点生效,需要先按F12打开控制台,然后再让代码运行。

方式二:通过浏览器打断点
比如在chrome浏览器中,需要打断点的话,可以在sources中找到对应的源码文件,点击行号那里,浏览器会生成一个蓝色标,这就把断点打上了,然后再次点击同样的位置可以取消断点。

方式三:通过vscode编辑器打断点
vscode中打断点很简单,点击代码行号的左侧,会出现一个小红点,意味着断点已经打上了,如果想取消断点的话,点击小红点即可。

2、在vscode中调试,需安装 JavaScript Debugger 扩展插件

在用vscode调试js之前,要确保先安装并启用了JavaScript Debugger扩展插件。

一、调试vue-cli创建的vue项目

1.1、创建项目

创建vue3项目,如果没安装vue-cli的,需要先执行npm install @vue/cli -g命令安装下。

vue create vue3-demo

这里需要注意下,给这个项目安装依赖的时候,node版本不能太低,比如我node用v12.18.3安装后,会报 Error: @vitejs/plugin-vue requires vue (>=3.2.13) or @vue/compiler-sfc to be present in the dependency tree 错误,这里介绍下我的本地环境:

  • @vue-cli版本:v5.0.8
  • node版本:v18.16.0
  • npm版本:v9.5.1

1.2、增加断点

我这里用的是setup语法,在App.vue中增加了如下代码:

// App.vue
<script setup>
import { onMounted } from 'vue';

onMounted(() => {
  debugger;
})
</script>

由于我们创建项目的时候,选了eslint, 所以这里增加debugger代码后,在编译时会出现一条eslint报错

我们先通过修改项目配置,忽略这个错误。

// vue.config.js
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
+ lintOnSave: false,
})

lintOnSave可以设置以下几个值:

  1. default(默认值):将编译错误输出到浏览器上,并导致编译失败;
  2. true/warning:会输出编译警告,但不会导致编译失败;
  3. error: 输出编译错误,并导致编译失败。
  4. false: 不通过eslint-loader去检测代码。

当然,我们这种解决问题的方式,本质上只是把灰尘扫到地毯下面而已,实际开发中还要通过eslint规则的配置以及针对性修复来解决这些eslint报错,而不是忽略

接下来我们先通过npm run serve去启动项目,然后通过vscode开始调试了。

1.3、创建vscode的调试文件launch.json

然后就可以开始创建配置文件了。

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "chrome", // 用 chrome 来进行调试
            "name": "debugger vue3", // 本次调试的名称
            "url": "http://localhost:8080", // 调试的网页url,这就是我们刚刚通过 npm run serve 跑起来的网页地址
            "request": "launch", // launch 指的是把上面 url 字段对应的网页跑起来
            "webRoot": "${workspaceFolder}" // 工作根目录
        }
    ]
}

通过这个配置文件,在vscode中把调试程序跑起来,如下所示:

会发现这里debugger竟然停在了一个App.vue?91a0的临时文件中。

这里简单解释下,由于vue-cli生成的项目,用的soure-map是eval-cheap-module-source-map,由于带了eval,导致生成的调试文件带了hash,所以只需要把eval去掉就好了。

// vue.config.js
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
    transpileDependencies: true,
    lintOnSave: false,
+   configureWebpack: config => {
+     config.devtool = 'source-map';
+   }
})

这样修改完vue.config.js,我们重新运行下npm run serve重启下项目,然后发现就可以正常调试了。

1.4、优化soure-map

不过这样的话,我们用了性能更低的source-map,所以我单独在package.json加了一个调试命令。

// package.json
{
  "scripts": {
    "serve:debug": "vue-cli-service serve --debug"
  }
}

然后调整下vue.config.js的配置:

  // vue.config.js
  const { defineConfig } = require('@vue/cli-service')
+ const isDebug = process.argv.includes('--debug');
  module.exports = defineConfig({
    transpileDependencies: true,
    lintOnSave: false,
    configureWebpack: config => {
-      config.devtool = 'source-map';
+      config.devtool = isDebug ? 'source-map' : 'eval-cheap-module-source-map';
    }
  })

以后我们如果需要调试的话,直接运行npm run serve:debug就行。

vue2的调试跟vue3类似,这里就不多说了。

1.5、假如调试无法启动怎么办?

如果调试启动失败了,很可能是你的路径有问题,由于我们的source-map是经过webpack进行生成的,所以最终可能调试的路径,无法映射到真实的项目路径中,这个时候就需要使用调试配置文件中的sourceMapPathOverrides选项了。

一般通过增加如下配置就能解决问题:

{
    "version": "0.2.0",
    "configurations": [
        {
             "type": "chrome", // 用 chrome 来进行调试
             "name": "debugger vue", // 本次调试的名称
             "url": "http://localhost:8080", // 调试的网页url,这就是我们刚刚通过 npm run serve 跑起来的网页地址
             "request": "launch", // launch 指的是把上面 url 字段对应的网页跑起来
             "webRoot": "${workspaceFolder}" // 工作根目录+
+            "sourceMapPathOverrides": { // sourceMap路径映射
+                "webpack:///src/*": "${workspaceFolder}/src/*",
+                "webpack://项目名字/src/*": "${workspaceFolder}/src/*"
+            }
        }
    ]
}

二、调试vite创建的vue项目

  1. 先使用npm init vite@latest命令创建vue3项目
  2. 使用npm install安装依赖
  3. 使用npm run dev把项目跑起来

创建调试文件:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "chrome",
            "request": "launch",
            "name": "debugger vue-vite-project",
            "url": "http://localhost:5173",
            "webRoot": "${workspaceFolder}"
        }
    ]
}

然后直接打断点,启动vscode调试就可以了,比较简单。

标签:vue,debugger,项目,断点,config,调试,cli
From: https://blog.csdn.net/m0_67275869/article/details/144919975

相关文章

  • VueFlow
    Vue3VueFlowindex.vue<template><VueFlow@pane-ready="onPaneReady":nodes="nodes":edges="edges":default-viewport="{zoom:1}":nodes-draggable="true"@node-click="onNodeClick"......
  • 在vue中mixin解决了哪些问题?
    在Vue中,mixin主要解决了以下问题:代码复用:在Vue项目开发中,经常会有多个组件需要共享某些相同的逻辑或方法。通过mixin,我们可以将这些共享的逻辑或方法提取出来,形成一个可复用的代码片段,从而避免了在每个组件中重复编写相同的代码。这不仅提高了代码的可维护性,也大大减少了代码量......
  • STM32-笔记33-Wi-Fi遥控风扇项目
    一、项目简介        电脑通过esp8266模块远程遥控风扇。PC端的网络调试助手(以服务端的模式连接客户端的esp8266)二、项目实现复制项目文件36-编程实现ESP8266连接TCP服务器重命名为:38-wifi控制风扇项目重命名为fan加载文件main.c#include"sys.h"#includ......
  • 在vue中hooks和mixin有什么区别?
    在Vue中,hooks和mixins都是用于复用代码的机制,但它们在使用方式、作用范围和灵活性方面存在一些区别。来源与定义:Hooks:在Vue3中,引入了CompositionAPI,其中的hooks(如ref,reactive,computed等)允许用户更灵活地组织和复用代码逻辑。这些hooks是函数,可以在setup函数内部调用......
  • 请解释下XHR,ajax,axios,fetch,vue-resource的相同和不同有哪些?
    在前端开发中,XHR(XMLHttpRequest)、Ajax(AsynchronousJavaScriptandXML)、Axios、Fetch和Vue-resource都是用于处理HTTP请求的工具或技术。它们各有特点和用途,下面是对它们的相同点和不同点的解释:相同点:发送HTTP请求:这些技术都能够发送HTTP请求,与服务器进行通信。异步处理......
  • 请解释下vue3中setup的作用是什么?
    在Vue3中,setup是一个新的组件选项,它是VueCompositionAPI的一部分。setup函数为Vue组件提供了一种更灵活、更可复用的方式来组织和共享代码逻辑。以下是setup的主要作用和特点:声明响应式状态:在setup函数中,你可以使用ref和reactive来创建响应式状态。这些状......
  • vue3中watch和watchEffect有什么不同?
    在Vue3中,watch和watchEffect都是用于观察和响应Vue实例上的数据变化的功能,但它们在使用方式、响应性追踪和行为上有一些关键区别。使用方式:watch需要显式地指定要观察的数据源(可以是一个getter函数、一个ref、一个reactive对象或它们的计算属性),以及当数据源变......
  • vue3中watch和computed有什么不同?
    在Vue3中,watch和computed都是用于处理响应式数据的特性,但它们在使用场景、行为特性和语法上有所不同。使用场景:computed:当你需要根据响应式数据计算得出一个新的值时,通常使用computed。它是一个可读的属性,可以根据依赖数据进行动态计算,并且只有当依赖数据发生变化时,才会重新......
  • pinia和vuex有什么区别?
    Pinia和Vuex都是Vue.js的状态管理库,它们之间的区别可以从以下几个方面进行归纳:与Vue版本的兼容性:Vuex:主要用于Vue2,虽然也可以用于Vue3,但需要使用Vuex4.x版本。Pinia:专为Vue3开发,充分利用了Vue3的CompositionAPI,不提供对Vue2的支持。状态管理的方式:Vuex:遵循单一......
  • 请说说vue3相比于vue2有什么优势?
    Vue3相比于Vue2在前端开发中具有以下显著优势:性能提升:Vue3通过优化VirtualDOM和模板编译,实现了更快的页面渲染速度和更高的性能。特别是在处理大量数据和复杂组件时,这种优势更加明显。此外,Vue3还支持异步渲染,这进一步提高了网站的加载速度。响应式系统改进:Vue3使用了Proxy代理......