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

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.xdnf.cn/news/146456.html

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

相关文章

JAVA毕业设计178—基于Java+Springboot+vue的智能家具管理系统(源代码+数据库+万字论文)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue的智能家具管理系统(源代码数据库万字论文)178 一、系统介绍 本项目前后端分离(可以改为ssm版本)&#xff0c;分为用户、管理员两种角色 1、用户&#xff1…

带你0到1之QT编程:十四、QV/HBoxLayout和QStatckedWidget双剑合璧

此为QT编程的第十四谈&#xff01;关注我&#xff0c;带你快速学习QT编程的学习路线&#xff01; 每一篇的技术点都是很很重要&#xff01;很重要&#xff01;很重要&#xff01;但不冗余&#xff01; 我们通常采取总-分-总和生活化的讲解方式来阐述一个知识点&#xff01; …

如何写一个自动化Linux脚本去进行等保测试--引言

#我的师兄喜欢给我的休闲实习生活加活&#xff0c;说是让我在实习期间写一个自动化脚本去进行等保测试。呵呵哒。 怎么办呢&#xff0c;师兄的指令得完成&#xff0c;师兄说让我使用Python完成任务。 设想如下&#xff1a; 1、将Linux指令嵌入到python脚本中 2、调试跑通 …

【Day02-JS+Vue+Ajax】

1. JS介绍 在前面的课程中&#xff0c;我们已经学习了HTML、CSS的基础内容&#xff0c;我们知道HTML负责网页的结构&#xff0c;而CSS负责的是网页的表现。 而要想让网页具备一定的交互效果&#xff0c;具有一定的动作行为&#xff0c;还得通过JavaScript来实现。那今天,我们就…

如何用 Web 界面 AI 工作流提升科研写作效率?

&#xff08;注&#xff1a;本文为小报童精选文章。已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费&#xff09; 更易用&#xff0c;更高效。 痛点 作为一名研究生导师&#xff0c;我深深体会到学生在撰写论文时拖延症的严重程度。他们往往打开一个空白的 Word 文档&…

CSS01-语法规范、基础选择器

一、CSS语法规范 示例&#xff1a; 二、CSS的基础选择器 选择器(选择符)就是根据不同需求把不同的标签选出来这就是选择器的作用。 简单来说&#xff0c;就是选择标签用的。 选择器的分类&#xff1a; 1、标签选择器 2、类选择器&#xff08;开发最常用&#xff09; 长字符命名…

VScode开发GD32移植(标准库通用),保姆级!!!!!!!

VScode开发GD32移植(标准库通用)&#xff0c;保姆级&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 文章目录 VScode开发GD32移植(标准库通用)&#xff0c;保姆级&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#…

稳联Profinet转Canopen网关携手伺服,高效提升生产效率

在当今的工业生产领域&#xff0c;追求高效、精准和可靠的生产方式是企业不断努力的方向。稳联技术Profinet转Canopen&#xff08;WL-ABC3033&#xff09;网关与伺服系统的携手合作&#xff0c;为提高生产效率带来了新的机遇和突破。 实现无缝通信&#xff0c;优化生产流程稳联…

煤矿智慧矿井数据集 (1.煤矿采掘工作面智能分析数据集2.煤矿井下钻场智能分析数据集 )

智慧矿井智能分析数据集 数据1&#xff1a;数据1包含煤矿采掘工作面工人安全帽检测&#xff0c;工人行为检测&#xff08;行走&#xff0c;站立&#xff0c;坐&#xff0c;操作&#xff0c;弯腰&#xff0c;靠&#xff0c;摔&#xff0c;爬&#xff09;&#xff0c;液压支撑防护…

python内置装饰器,解决接口自动化中公共方法(如,读excel),无需实例化即可调用...

Python 还提供了一些内置的装饰器&#xff0c;比如 staticmethod 和 classmethod&#xff0c;用于定义静态方法和类方法。 如接口自动化中&#xff0c;公共的方法&#xff0c;在一个文件夹&#xff0c;其他文件需要调用&#xff1b;

【题库制作】对于一个文档题库,将3或4个选项的题目分别放在单独的区域

原文链接&#xff1a;https://www.cnblogs.com/MrFlySand/p/18422619 操作步骤 如下图&#xff0c;对于一个文档题库&#xff0c;将3或4个选项的题目分别放在单独的区域 多添加一行D&#xff1a;将答案&#xff1a;替换为D.\n答案&#xff1a; 删除多余的D行&#xff1a;将D\…

HTML粉色烟花秀

目录 系列文章 写在前面 完整代码 代码分析 写在最后 系列文章 序号目录1HTML满屏跳动的爱心&#xff08;可写字&#xff09;2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐5HTML蓝色爱心射线6HTML跳动的爱心&#xff08;简易版&#xff09;7HTML粒子爱心8HTML蓝色…

CSP-J2024年全真模拟题 阅读程序篇2

因为明天考试&#xff0c;这回给大家准备了超详细的解析~ 22.程序中 n 和 m 只有输入正整数&#xff0c;程序的输出值才可能是 YES A.对B.错 23.程序中用到了递归函数 bool fun&#xff08;int n&#xff09; A.对B.错 24.若输入 n 和 m 都是素数&#xff0c;程序的输出值…

powerbi- l6-获取文件的动态链接

需求&#xff1a; 需要对文件夹中的文件进行处理处理的文件名包含当天的日期&#xff0c;格式为年月日 在powerbi 中打开高级编辑&#xff0c;将文件夹的名称中动态内容进行修改&#xff0c;按照如下的格式&#xff0c; 比如文件名为&#xff1a;fixed_name_20240930_abc.pdf…

生活小助手系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;客户管理&#xff0c;社区公告管理&#xff0c;反馈信息管理&#xff0c;生活缴费处管理&#xff0c;物品分类管理&#xff0c;二手物品管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统…

股指期权交易详细基础介绍

股指期权是期权市场中的一种特定类型&#xff0c;其标的资产为股票指数。简而言之&#xff0c;它允许投资者在未来某个特定时间&#xff0c;以预先约定的价格&#xff0c;买入或卖出股票指数的权利。在中国&#xff0c;已上市的股指期权包括上证50、沪深300和中证1000股指期权&…

Yocto - 使用Yocto开发嵌入式Linux系统_02 认识 Yocto 项目

Meeting the Yocto Project 本章向你介绍 Yocto 项目。这里讨论的项目主要概念将贯穿全书。此外&#xff0c;我们还将简要讨论 Yocto 项目的历史、OpenEmbedded、Poky、BitBake、元数据和版本模式。系好安全带&#xff0c;欢迎加入我们的行列&#xff01; This chapter introdu…

NC65客开常见问题以及解决方案

NC65客开常见问题以及解决方案 元数据实体对应的数据库表没有创建&#xff1a; 参照发布元数据第三步&#xff0c;生成数据库表 元数据名称和字段名称不一致导致报错: 更改为一致&#xff0c;删除原有的数据库表&#xff0c;重新生成数据库表并且重新发布元数据&#xff08;如…

【Qt之·文件操作·类QTextStream、QDataStream】

系列文章目录 文章目录 前言一、概述1.1 QTextStream类1.2 QTextStream类的作用和用途 二、基本用法2.1 QTextStream成员函数2.2 QTextStream格式描述符、描述符方法2.3 QDataStream成员函数2.4 创建QTextStream对象并关联输入/输出设备&#xff08;如文件、标准输入/输出流等&…

34. 模型材质父类Material

学习到现在大家对threejs的材质都有简单的了解&#xff0c;本节课主要结合文档&#xff0c;从JavaScript语法角度&#xff0c;给大家总结一下材质API的语法。 材质父类Material 查询threejs文档&#xff0c;你可以看到基础网格材质MeshBasicMaterial、漫反射网格材质MeshLamb…