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

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中统一处理

活动登录模板

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

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VSCode中添加npm调试,可以按照以下步骤进行操作: 1. 打开项目文件夹,并在项目根目录下创建一个`.vscode`文件夹(如果还没有)。 2. 在`.vscode`文件夹中创建一个`launch.json`文件,该文件用于配置调试器。 3. 在`launch.json`文件中,添加一个配置项,用于配置npm调试。可以参考以下示例配置: ```json { "version": "0.2.0", "configurations": \[ { "type": "node", "request": "launch", "name": "npm debug", "runtimeExecutable": "npm", "runtimeArgs": \[ "run-script", "debug" \], "port": 5858 } \] } ``` 在上述配置中,`runtimeExecutable`指定了要使用的运行时,这里配置成了npm。`runtimeArgs`的第二个参数是npm scripts的命令名,第一个参数`run-script`不要修改。`port`指的是npm scripts中配置的`--inspect-brk=5858`调试端口号5858。\[1\]\[2\] 4. 保存`launch.json`文件。 5. 在VSCode调试面板中,选择`npm debug`配置,并点击调试按钮启动npm调试。 这样,VSCode就会使用npm运行调试命令,并连接到指定的调试端口,实现npm调试功能。\[1\]\[2\] #### 引用[.reference_title] - *1* *2* [使用vscode调试npm scripts](https://blog.csdn.net/tankpanv/article/details/121434587)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [VSCodenpm包管理器安装到卸载](https://blog.csdn.net/weixin_44538225/article/details/122228542)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值