Vue3DevTools7是如何在vscode定位指定文件位置的?

news2024/12/24 8:49:35

Vue3DevTools7是如何在vscode定位指定文件位置的?

背景

今天在使用vue脚手架创建项目的时候,并发现一个新的(实验中的新功能),可以直接在我们的项目中集成Vue DevTools插件,浏览器插件devtools即将成为历史。

这个新插件拥有浏览器插件devtools的所有功能,以及一个新功能!!(直接在网页选中元素,可以在vscode中打开指定元素源码文件位置)

注意到可以通过网页直接在vscode定位文件位置,于是解析了他的实现原理。

  • 注意这两个新东东!!!!
    请添加图片描述

  • 网页中效果

    • 点击左边的小图标,这里的可以查看组件信息,路由信息,pinia数据等,和devtools浏览器插件一样

      • 请添加图片描述
    • 点击右边的小图标,可直接选中元素,然后可以在vscode中打开对应的源码文件!!!!!!!!!!!!!

      • 请添加图片描述

如何在项目中集成

  • 可以在新建项目的时候选择新增Vue Devtools 7拓展,这是一个vite插件,目前还在实验阶段

    • 快速上手 | Vue.js (vuejs.org)
    • 请添加图片描述
  • 当我们启动项目的时候控制台下面会有提示

    • 通过alt+shift+D可以在网页中快速唤出这个工具
    • 请添加图片描述

原理解析

Vue 3 的 DevTools 提供了强大的功能,允许开发者实时查看组件、状态和事件。当我们需要快速查找与某个 UI 元素相关的代码时,可以在浏览器中选中元素,然后直接在编辑器中浏览文件。提提高了效率,不用再傻乎乎的自己打开vscode然后找到对应的文件。

对此,需要剖析实现原理,当选中网页上的某个元素时,能够自动生成一个命令,将 VSCode 打开到对应的文件和行数。以此来提升我们的工作效率

在终端中使用vscode打开文件或者文件夹

当我们在cmd窗口中执行下面的命令的时候,会在vscode中打开指定文件,并定位到指定行列

请添加图片描述

// --reuse--window不打开新的窗口,-g:跳转到指定行列
cmd: code --reuse-window -g ./components/TheWelcome.vue:86:5
cmd: code --reuse-window -g 路径/文件名:行:列

code 还有其他命令选项:

参数描述
-h 或 --helpcode使用说明
-v 或 --versionVS Code版本(例如:0.10.10)
-n 或 --new-window打开一个VS Code新的版本替代默认版本
-r 或 --reuse-window强制打开最后活动窗口的文件或文件夹
-g 或 --goto当和 file:line:column? 使用时 ,打开文件并定位到一个的特定行和可选的列位置的文件。
file以一个文件名打开。如果文件不存在,此文件将被创建并标记为已编辑
file:line:column?以文件的名称在指定行和可选的列的位置打开,你可以以这个方式指定多个文件。但是在使用 file:line:column? 之前必须使用 -g 参数。例如:code -g file:10
folder以一个文件夹名打开。你可以指定多个文件夹。例如:code folder folder
-d 或 --diff打开一个不同的编辑器。需要两个文件路径作为参数。例如:code -d file file
–locale为VS Code设置显示语言,支持语言环境有:en-US (英语) ,zh-TW(中文繁体),zh-CN (中文简体),fr ,de ,it ,ja ,ko ,ru ,es 。例如:code . --locale=en-US 设置显示语言为英语
–disable-extensions禁用所有安装的插件。下拉选 Show installed Extensions 后插件依然可见,但是永远不会被激活。
–list-extensionscode --list-extensions 列出被安装的插件
–install-extension安装一个插件。提供完整的扩展名 publisher.extension 作为参数。例如:code --install-extension ms-vscode.cpptools
–uninstall-extension卸载一个插件。提供完整的扩展名 publisher.extension 作为参数.例如 code --uninstall-extension ms-vscode.csharp
-w 或 --wait等待窗口返回之前关闭

实现步骤

以下是实现的具体步骤,包括必要的伪代码代码示例。

这需要前后端配合

  • 前端发送文件信息,包括文件路径,文件名,行和列信息,
  • 后端拿到前端传过来的信息,调用cmd命令,在vscode中打开指定文件及其对应行列
1. 创建 Vue 组件

首先,我们需要一个简单的 Vue 3 组件,并在其中添加点击事件以处理打开文件的逻辑。

<template>
  <div @click="openFileAtLocation">点击我打开文件</div>
</template>
​
<script>
export default {
  methods: {
    openFileAtLocation() {
      const filePath = './components/TheWelcome.vue'; // 文件路径
      const line = 86; // 行号
      const column = 5; // 列号
​
      this.openInVSCode(filePath, line, column);
    },
    openInVSCode(filePath, line, column) {
        // 将参数发送给后端
      post({
        filePath, line, column
        })
    }
  }
}
</script>
​
<style scoped>
div {
  cursor: pointer;
  color: blue;
}
</style>
2.后端需要启动node服务,这里是伪代码
const { exec } = require('child_process');
// 接受前端传递过来的参数
router.post("/",(req,res)=>{
    let {filePath.line,column} = req.body
    // --reuse--window不打开新的窗口,-g:跳转到指定行列
    const command = `code --reuse-window -g ${filePath}:${line}:${column}`;
    // 指定这个命令就能实现打开vscode中的指定文件,及其行数
    exec(command, (err) => {
        if (err) {
            console.error(`打开文件时出错: ${err}`);
            }
        });
    })
}
2. 理解代码
  • 点击事件:当用户点击组件中的 <div> 时,触发 openFileAtLocation 方法。
  • 构造命令:我们在 openInVSCode 方法中使用 Node.js 的 child_process 模块,通过 exec 执行 code --reuse-window -g 命令。
  • 错误处理:如果命令执行失败,会在控制台输出错误信息。
3. 测试功能

确保你的开发环境中已安装 VSCode,并能够通过命令行调用 code 命令。运行应用后,点击组件,即可在 VSCode 中打开指定的文件和行。

总结

通过这种方式,我们可以在开发过程中快速定位到相关的代码,大大提升了调试和开发的效率。希望这个小技巧能够帮助到你们,让你们在使用 Vue 3 开发时更加得心应手!

如果你对这个功能有任何问题或者有更好的建议,欢迎在评论区讨论!

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

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

相关文章

第十三周:机器学习笔记

第十三周周报 摘要Abstract一、机器学习——Transformer&#xff08;上&#xff09;1. Sequence to Sequence(Seq 2 Seq&#xff0c;序列到序列模型) 的应用2. Transformer的结构2.1 Transformer encoder&#xff08;Transformer 编码器&#xff09; 二、Pytorch学习1. 网络模型…

python爬虫初体验(一)

文章目录 1. 什么是爬虫&#xff1f;2. 为什么选择 Python&#xff1f;3. 爬虫小案例3.1 安装python3.2 安装依赖3.3 requests请求设置3.4 完整代码 4. 总结 1. 什么是爬虫&#xff1f; 爬虫&#xff08;Web Scraping&#xff09;是一种从网站自动提取数据的技术。简单来说&am…

BandiView 7.03 看图软件

BandiView 加入了大量现代化功能特性&#xff0c;比如支持 HDR 照片高动态范围效果、支持 HEIC / RAW / 漫画模式、免解压直接看图、查看 AI 图片提示词等 BandiView 是一款非常值得推荐的电脑全能看图浏览工具软件&#xff0c;软件的兼容性非常强&#xff0c;可以一站式满足用…

java通过org.eclipse.milo实现OPCUA客户端进行连接和订阅

前言 之前写过一篇关于MQTT的方式进行物理访问的文章&#xff1a;SpringBoot集成MQTT&#xff0c;WebSocket返回前端信息_springboot mqtt websocket-CSDN博客 最近又接触到OPCUA协议&#xff0c;想通过java试试看能不能实现。 软件 在使用java实现之前&#xff0c;想着有没…

欠款管理代码———未来之窗行业应用跨平台架构

一、欠款管理代码 function fun_会员_还款操作(会员卡信息id,MainID){var 未来之窗vos对话框_内容 ";var title"test";var 未来之窗vos对话框_id"hjksgfjkkhkj_child";CyberWin_Dialog.layer(未来之窗vos对话框_内容,{type:"url",title:&…

windows下,用docker部署xinference,为什么老是提示localhost无法访问?

部署xinference有两种方式&#xff1a; 一、本地部署 &#xff08;略&#xff09; 二、使用Docker部署&#xff08;与运行&#xff09; 其中又包括&#xff1a; 1&#xff09;使用CPU的方式&#xff1a;&#xff08;略&#xff09; 1&#xff09;使用GPU的方式&#xff1…

LeetCode_sql_day30(1264.页面推荐)

描述 1264.页面推荐 朋友关系列表&#xff1a; Friendship ------------------------ | Column Name | Type | ------------------------ | user1_id | int | | user2_id | int | ------------------------ (user1_id, user2_id) 是这张表具有唯一值的…

低代码可视化工具--vue条件判断v-if可视化设置-代码生成器

在Vue UniApp中&#xff0c;条件判断通常是通过指令v-if、v-else-if、v-else来实现的。这些机制允许你根据表达式的真假值来决定是否渲染某个元素或元素组&#xff0c;或者执行特定的逻辑。 条件判断说明 v-if 是惰性的&#xff1a;如果在初始渲染时条件为假&#xff0c;则什么…

mac os x 找不到钥匙串访问

昨天手贱更新了最新的mac系统&#xff0c;结果在实用工具中找不到钥匙串访问APP了。。。 最新mac系统为 15.0 (24A335) 真是醉了。。。 那就得想办法把他给呼出来&#xff0c;在开发者中心下载了一个.cer文件&#xff0c;然后双击打开&#xff0c;此时钥匙串打开了&#xff…

猿大师办公助手在线编辑Office为什么要在客户端电脑安装插件微软Office或金山WPS?

猿大师办公助手作为一款专业级的网页编辑Office方案&#xff0c;与在线云文档方案&#xff08;飞书、腾讯文档等&#xff09;不同&#xff0c;需要在客户端电脑安装猿大师办公助手插件及微软Office或者金山WPS软件&#xff0c;很多客户不理解为什么要这么麻烦&#xff0c;能否客…

从虚拟到现实:数字孪生与数字样机的进化之路

数字化技术高速发展的当下&#xff0c;计算机辅助技术已成为产品设计研发中不可或缺的一环&#xff0c;数字样机&#xff08;Digital Prototype, DP&#xff09;与数字孪生技术便是产品研发数字化的典型方法。本文将主要介绍数字样机与数字孪生在国内外的发展&#xff0c;并针对…

机器翻译之创建Seq2Seq的编码器、解码器

1.创建编码器、解码器的基类 1.1创建编码器的基类 from torch import nn#构建编码器的基类 class Encoder(nn.Module): #继承父类nn.Moduledef __init__(self, **kwargs): #**kwargs&#xff1a;不定常的关键字参数super().__init__(**kwargs)def forward(self, X, *args…

[产品管理-29]:NPDP新产品开发 - 27 - 战略 - 分层战略与示例

目录 1. 公司战略 2. 经营战略 3. 创新战略 4. 新产品组合战略 5. 新产品开发战略 战略分层是企业规划和管理的重要组成部分&#xff0c;它涉及不同层级的战略制定和实施。以下是根据您的要求&#xff0c;对公司战略、经营战略、创新战略、新产品组合战略、新产品开发战略…

闯关leetcode——66. Plus One

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/plus-one/description/ 内容 You are given a large integer represented as an integer array digits, where each digits[i] is the ith digit of the integer. The digits are ordered from mo…

2016年国赛高教杯数学建模B题小区开放对道路通行的影响解题全过程文档及程序

2016年国赛高教杯数学建模 B题 小区开放对道路通行的影响 2016年2月21日&#xff0c;国务院发布《关于进一步加强城市规划建设管理工作的若干意见》&#xff0c;其中第十六条关于推广街区制&#xff0c;原则上不再建设封闭住宅小区&#xff0c;已建成的住宅小区和单位大院要逐…

TinkerTool System for Mac实用软件系统维护工具

TinkerTool System 是一款功能全面且强大的 Mac 实用软件&#xff0c;具有以下特点和功能&#xff1a; 软件下载地址 维护功能&#xff1a; 磁盘清理&#xff1a;能够快速扫描并清理系统中的垃圾文件、临时文件以及其他无用文件&#xff0c;释放宝贵的磁盘空间&#xff0c;保…

c++优先级队列自定义排序实现方式

1、使用常规方法实现 使用结构体实现自定义排序函数 2、使用lambda表达式实现 使用lambda表达式实现自定义排序函数 3、具体实现如下&#xff1a; #include <iostream> #include <queue> #include <vector>using namespace std; using Pair pair<in…

FL Studio 24.1.1.4285中文破解完整版免费下载FL 2024注册密钥完整版crack百度云安装包下载

FL Studio 24.1.1.4285中文破解版是一个强大的软件选项&#xff0c;可以使用专业应用程序&#xff08;如最先进的录音机、均衡器、内置工具等&#xff09;制作循环和歌曲。它由数百个合成器和混响等效果以及均衡器组成&#xff0c;除此之外&#xff0c;您还可以在新音乐制作的方…

solidwork找不到曲面

如果找不到曲面 则右键找到选项卡&#xff0c;选择曲面