前端调试技巧(npm Link,vscode调试,浏览器调试等)

news2024/9/23 11:24:21

Npm Link

功能:
在本地开发npm模块的时候,我们可以使用npm link命令,将npm 模块链接到对应的运行项目中去,方便地对模块进行调试和测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

断点调试

vscode调试

Debug Vue2 Project
  1. 目标:在VSCode中调试项目代码,即在VSCode中打的某个断点要映射到浏览器的运行代码中。
    a. 运行的项目代码由webpack打包生成,然后存储在webpack://xxx中
    b. VSCode的某行代码打上了断点,标记了本地文件夹下原文件的第几行
    c. 去找浏览器的代码,对应不上
    d. 一是文件经过编码,行数对不上:需要生成.map文件,使得VSCode找到断点位置在打包代码的映射
    e. 二是文件放置的目录对不上:VSCode去localhost/src找,但代码存到了webpack:///src中:需要写一个映射规则,让VSCode把找到的webpack://下的文件映射到本地路径下

2.步骤

  • 配置生成sourcemap:
const vueConfig = {
  configureWebpack: {
    devtool: 'source-map'
  }
}
  • 添加launch configurations文件:
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
  • 配置文件中增加sourceMapPathOverrides:
  • 在这里插入图片描述

在这里插入图片描述

Debug Vue3 Project

  • 文件位置:从项目的端口取资源
    在这里插入图片描述
  • 文件内容:默认开启sourcemap
  • 添加launch configurations文件即可

浏览器调试

还有另外一种方式是,直接通过浏览器f12打开source找到对应文件设置断点调试

封装组件

使用$attrs

把传给子组件的props和事件打包起来以$attrs变量传给后代组件,可直接调用后代组件的api,避免了逐个声明props进行props的接收

  1. 传给子组件的v-model,再通过$attrs传给后代时,不能接收到数据变化
// Parent.vue
<my-input v-model="value" placeholder="...">

// MyInput.vue
<input v-bind="$attrs" type="text"/>
  1. 需要对传给子组件的v-model的事件名进行更改
// MyInput.vue
const props = defineProps(['modelValue'])
const emits = defineEmits(['update:modelValue'])
const value = computed({
  get: () => props.modelValue,
  set: (val) => {
    emits('update:modelValue', val)
  }
})

<input v-bind="$attrs" v-model="value" type="text"/>

使用json配置

针对H5页面的简单且后续不维护的表单,使用配置进行每一个form-item的生成。

  1. 一个form的配置生成一项form-item
  2. 通过value的指定,与formData的数据进行关联
  3. 通过传入formData,进行form的重新计算,更新form-item
<FormItem v-model="formData" :form="form"></FormItem>
const formData = {
    name: '',
    quality: '',
}
const form = [
    { type: 'input', label: '输入武将名字', value: 'name', placeholder: '4字以内', maxlength: "4" },
    { type: 'select', label: '选择武将兵种', value: 'quality', placeholder: '下拉选择', options: [
      { value: '1', label: '盾兵' },
      { value: '2', label: '弓兵' },
    ], ifShow: (formData) => {
        return formData.name
    } },
 ]
// FormItem.vue
<template>
    <div class="form-item" :class="getClass(item)" v-for="item, index in props.form" :key="index">
      <template  v-if="item.type === 'input'">
        <div class="label">{{ item.label }}</div>
        <div class="value">
          <Input :maxlength="item.maxlength" v-model="modelValue[item.value]" type="text" :placeholder="item.placeholder"></Input>
        </div>
      </template>
      <template v-else-if="item.type === 'select'">
      <div v-show="item.ifShow == null || typeof item.ifShow === 'function' && item.ifShow(modelValue)">
        <div class="label">{{ item.label }}</div>
        <div class="value">
          <Select v-model="modelValue[item.value]" :options="item.options" :placeholder="item.placeholder"></Select>
        </div>
      </div>
      </template>
      <template v-else-if="item.type === 'textarea'">
        <div class="label">{{ item.label }}</div>
        <div class="value">
          <Input v-model="modelValue[item.value]" type="textarea" :maxlength="item.maxlength" :placeholder="item.placeholder"></Input>
        </div>
      </template>
      <template v-else-if="item.type === 'upload'">
        <Upload class="upload" @openPick="emits('openPick')" :placeholder="item.placeholder"></Upload>
      </template>
    </div>
</template>

补充

还有另外一种方式是类似通过jsx的方式,通过一个函数传参的方式,决定是渲染哪种类型的组件

tab切换的刷新控制

  1. 初次加载:t-tabs会同时加载放在t-tab下的内容,需要把内容放在t-tabs外,使用KeepAlive包裹,实现打开才开始第一次加载;
  2. 后续刷新:tabA里做了操作,可能导致A刷新B不刷新,也可能导致AB都刷新,因此使用数据进行刷新控制;
const tableRefresh = ref({
  enabled: 0,
  disabled: 0,
});

例如A的操作要使B刷新,

// ATable.vue
const emits = defineEmits(['update:disabledRefresh']);

const onUpdate = () => {
    // post
    emits('update:disabledRefresh', 1);
}
// BTable.vue
const props = defineProps(['disabledRefresh']);

onActivated(() => {
  if (props.disabledRefresh) {
    getData();
    emits('update:disabledRefresh', 0);
  }
});

例如ATable组件被父组件的操作导致要刷新

// ATable.vue
const props = defineProps(['enabledRefresh']);

watch(
  () => props.enabledRefresh,
  (val) => {
    if (val) {
      getData();
      emits('update:enabledRefresh', 0);
    }
  },
);

补充:如果有多个tab,则可以将状态放到tabs中统一处理

活动登录模板

可以考虑统一登录模板或者分组织统一

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1921243.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker拉取镜像-配置阿里云镜像加速

1、配置阿里云镜像&#xff08;用于拉取镜像加速&#xff09; sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo syst…

论文阅读【时间序列】TimeMixer (ICLR2024)

【时间序列】TimeMixer (ICLR2024) 原文链接&#xff1a;TIMEMIXER: DECOMPOSABLE MULTISCALE MIXING FOR TIME SERIES FORECASTING 代码仓库&#xff1a;https://github.com/kwuking/TimeMixer 符号定义 符号含义P用于预测的历史序列长度&#xff08;seq_len&#xff09;F预测…

debian 12 Install

debian 前言 Debian是一个基于Linux内核的自由和开放源代码操作系统&#xff0c;由全球志愿者组成的Debian项目维护和开发。该项目始于1993年&#xff0c;由Ian Murdock发起&#xff0c;旨在创建一个完整的、基于Linux的自由软件操作系统。 debian download debian 百度网盘…

LangChain之工具Tools(下)

LangChain之工具Tools SQLDatabase工具准备数据初始化数据库光标查询​字符串查询带参数查询​使用SQLAlchemy查询​使用自然语言查询数据库 使用其他工具Tavily Search工具Dall-E图像生成工具ArXiv工具 SQLDatabase工具 在 LangChain 中,SQLDatabase工具可以用来与SQL数据库进…

和Bug较劲的第n天:[Error: Unable to open snapshot file: No such file or directory]

问题描述 最近做了一个小demo&#xff0c;基于parcel的&#xff0c;在迁移仓库的时候发生了一个报错 [Error: Unable to open snapshot file: No such file or directory] 原因分析&#xff1a; 在迁移仓库的时候&#xff0c;我将项目放入了一个以中文命名的文件夹里&#xf…

在生产环境中部署Elasticsearch:最佳实践和故障排除技巧——安装篇(一)

#在生产环境中部署Elasticsearch&#xff1a;最佳实践和故障排除技巧——安装篇&#xff08;一&#xff09; 前言 关键字&#xff1a; 机器学习 人工智能 AI chatGPT 学习 实现 使用 搭建 深度 python 事件 远程 docker mysql安全 技术 部署 技术 自动化 代码 文章目录 - -…

【斯坦福因果推断课程全集】2_无混淆和倾向分1

目录 Beyond a single randomized controlled trial Aggregating difference-in-means estimators Continuous X and the propensity score 随机试验的一个最简单的扩展是无约束下的干预效果估计。从定性上讲&#xff0c;当我们想估计一种并非随机的治疗效果&#xff0c;但一…

python-小理与他的画(赛氪OJ)

[题目描述] 小理是个画家&#xff0c;他希望有一天他的画能让心仪的她看到。 只是后来她有了他&#xff0c;他却只有他的画&#xff0c;他望着他的画&#xff0c;默默的发呆。 可惜做题的你&#xff0c;画不出他画的她&#xff0c;所以&#xff0c;我们只好画点简单的画&#x…

MFC扩展库BCGControlBar Pro v35.0 - 可视化管理主题等全新升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v35.0已全新发布了&#xff0c;这个版本改进类Visual Studio 2022的视觉主题、增强对多个…

土壤分析仪:解密土壤之奥秘的科技先锋

在农业生产和生态保护的道路上&#xff0c;土壤的质量与状况一直是我们关注的焦点。土壤分析仪&#xff0c;作为现代科技在农业和环保领域的杰出代表&#xff0c;以其高效、精准的分析能力&#xff0c;为我们揭示了土壤的奥秘&#xff0c;为农业生产提供了科学指导&#xff0c;…

只为拿证,软考中级哪个科目比较简单?

在探讨软考中级哪个最容易过时&#xff0c;我们首先需要了解软考的类别和具体的中级证书种类。软考全称为计算机技术与软件专业技术资格水平考试&#xff0c;是全国统一的考试&#xff0c;其证书由人力资源和社会保障部和国家工业和信息化部门联合颁发&#xff0c;具有很高的证…

cuda缓存示意图

一、定义 cuda 缓存示意图gpu 架构示意图gpu 内存访问示意图 二、实现 cuda 缓存示意图 DRAM: 通常指的是GPU的显存&#xff0c;位于GPU芯片外部&#xff0c;通过某种接口&#xff08;如PCIE&#xff09;与GPU芯片相连。它是GPU访问的主要数据存储区域&#xff0c;用于存储…

Git 详解(原理、使用)

git 快速上手请看这篇博客 Git 快速上手 1. 什么是 Git Git 是目前最主流的一个版本控制器&#xff0c;并且是分布式版本控制系统&#xff0c;可以控制电脑上所有格式的文档 版本控制器&#xff1a;记录每次修改以及版本迭代的管理系统 对于文本文件&#xff0c;可以记录每次…

AI就业指导机器人,你的专属职业导航灯!

本文由 ChatMoney团队出品 介绍说明 Hey&#xff01;亲爱的小伙伴们&#xff0c;今天我要给大家带来一个职场利器——AI就业指导机器人&#xff01;&#x1f916; 在这个充满变数的职场江湖&#xff0c;找到一份既能养家糊口又能实现自我价值的工作是多么重要。但是&#xff…

springCloud整合Dubbo案例

前言&#xff1a; 好久没有使用dubbo了&#xff0c;温习一下。 一、先搭建一个SpringCloud框架 整体框架如下图 1. 先创建一个父工程&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4…

【Qt 初识】QPushButton 的详解以及 Qt 中的坐标

文章目录 1. Qt 中的信号槽机制 &#x1f34e;2. 通过图形化界面的方式实现 &#x1f34e;3. 通过纯代码的方式实现按钮版的HelloWorld &#x1f34e;4. 设置坐标 &#x1f34e; 1. Qt 中的信号槽机制 &#x1f34e; 》&#x1f427; 本质就是给按钮的点击操作&#xff0c;关联…

Nodejs 第八十四章(ElasticSearch搜索)

ElasticSearch基本用法在之前的篇章介绍过了 这里不在过多阐述 模拟假数据 安装库 faker-js/faker 模拟假数据的一个库非常好用支持中文使用中文 locale: [zh_CN], 设置即可生成名字&#xff0c;邮箱&#xff0c;手机号&#xff0c;id&#xff0c;年龄&#xff0c;性别生成完成…

【自然语言处理】面向新冠肺炎的社会计算应用

面向新冠肺炎的社会计算应用 1 任务目标 1.1 案例简介 新冠肺炎疫情牵动着我们每一个人的心&#xff0c;在这个案例中&#xff0c;我们将尝试用社会计算的方法对疫情相关的新闻和谣言进行分析&#xff0c;助力疫情信息研究。本次作业为开放性作业&#xff0c;我们提供了疫情…

软件安装下载失败,常见问题汇总(微软软件必备运行库)

文章目录 前言一、卸载软件二、激活软件无法打开&#xff1f;三、安装软件必备运用库扩展&#xff1a;win64位操作系统跟win32位操作系统区别之处 前言 我们在安装激活一些常用的办公软件&#xff0c;如&#xff1a;visio、Matlab、office等等&#xff0c;经常会遇到各种问题&…

Feature Alignment and Uniformity for Test Time Adaptation--论文笔记

论文笔记 资料 1.代码地址 https://github.com/SakurajimaMaiii/TSD 2.论文地址 https://arxiv.org/abs/2303.10902 3.数据集地址 论文摘要的翻译 TTA在接收训练分布外的测试域样本时对深度神经网络进行自适应。在这样设置下&#xff0c;模型只能访问在线未标记的测试样…