VSCode自定义插件创建教程

ops/2024/11/24 1:27:14/

文章目录

    • 一、前言
    • 二、插件维护
    • 三、调试插件
    • 四、使用 vsce 生成 vsix 插件
    • 五、问题汇总
      • 5.1 打开调试窗口后,输入helloworld并没有指令提示
      • 5.2 插件调试无问题,打包生成 .vsix 文件后无法使用
    • 六、插件创建实战
    • 七、拓展阅读

一、前言

对于前端程序猿来讲,最常用的开发利器中VSCode首当其冲,因为VSCode免费,速度快,且提供了丰富插件。结合实际项目开发需求,有时候需要借助定制化插件以提升开发效率,此篇博文主要讲解如何创建自定义VSCode插件。

在这里插入图片描述

安装脚手架

npm install -g yo generator-code

在这里插入图片描述

初始化插件目录
终端运行 yo code,按照提示生成目录即可。

在这里插入图片描述
在插件的开发过程中,会经常改动文件,可以运行pnpm watch命令,用来监听文件的改动,以及打包运行。

在这里插入图片描述
注⚠️:在调试插件之前,进行启动,否则在调试窗口,自定义的命令会不生效。

二、插件维护

开发插件的文件,位于src\extension.tsextension.ts是开发的入口文件,如果代码量比较小可直接在这个文件中写,代码量比较大可以在其他文件中写,最后从当前文件中进行引用即可。

在这里插入图片描述

三、调试插件

VSCode工具左侧,运行和调式图标,然后再点击绿色的小三角按钮或者快捷键(F5)就可以运行了。
在这里插入图片描述
执行完成之后,会弹出一个新的VSCode窗口,看到扩展开发宿主字样,说明调试窗口就开启成功了。

在这里插入图片描述
通过快捷键“Ctrl+Shift+P”,然后输入相应指令,例如:“Hello world”,选中条目,窗口下方会有对应的提示!如下图所示:

在这里插入图片描述

四、使用 vsce 生成 vsix 插件

首先,需要把自己开发好的插件进行打包(.vsix格式的插件文件),需要安装vsce这个包,vsce是“Visual Studio Code Extensions”的缩写,是一个用于打包、发布和管理VS Code扩展的命令行工具。

这种方式可以实现即使没有发布到应用市场,也可以直接通过对应文件安装的方式进行插件安装和使用。步骤如下:

  1. 安装 vsce 工具
    安装命令 npm i vsce -g

  2. 打包生成 .vsix 文件
    直接使用 vsce package 命令进行打包,完成后就会生成一个 .vsix 文件,这个也就是在后续安装插件时要使用的文件。

【注意⚠️】 在使用这个命令打包时,可能会出现 vsce 所需要支持的 VSCode 最低版本和当前使用版本之间存在出入,导致打包失败。需要将 VSCode 版本进行升级,而不是手动修改版本号。

在这里插入图片描述

  1. 安装 vsix 插件
    按照如下方式操作并选择对应的 .vsix 文件即可。

在这里插入图片描述

五、问题汇总

5.1 打开调试窗口后,输入helloworld并没有指令提示

在这里插入图片描述

原因:当前电脑安装的VSCode版本过低,不支持当前插件的使用(因为自动生成的插件总是默认使用最新版VSCode),所以需要将插件使用的VSCode版本降低。

package.json中的engines.vscode版本不能高于本电脑安装的VSCode版本。

5.2 插件调试无问题,打包生成 .vsix 文件后无法使用

自定义插件安装之后,如果插件没有起作用,通常有以下几个原因:

  1. 插件版本与 VSCode 版本不兼容VSCode会不定期更新,如果插件版本过老,可能会出现兼容性问题导致插件无法正常工作,需要更新插件。
  2. 插件未启用:有些插件需要手动启用才能生效,在调试时需要检查插件设置,确保插件已启用。
  3. 插件依赖项未安装:有些插件依赖特定的软件包或库,如果没有安装这些依赖项插件也无法正常使用。在插件安装之前需要检查其依赖项,确保已经安装。
  4. VSCode 设置问题:某些插件需要特定的VSCode设置才能正常工作,需要检查VSCode的设置是否正确,如果不正确需要进行调整。

以上是一些插件不生效的常见原因,经过排除以上问题,发现生成的自定义插件仍然无法正常使用。
在这里插入图片描述

六、插件创建实战

在开发过程中,存在以下需求:在编写代码过程中,需要遵守命名规范,那么就需要对存量代码进行转换。实现步骤如下:

1、定义命令
首先,需要在pageage.json定义,所需要的命令,如下图所示:

在这里插入图片描述
然后需要配置,在编辑区域选中,进行转换。配置如下所示:

在这里插入图片描述
在这里定义完所有的自定义的命令之后,就需要在入口文件(extension.ts)写每个命令对应的逻辑代码。

为便于注册指令,把所有命令名定义成一个常量对象,如下所示:
在这里插入图片描述
把所有命令,循环进行注册,如下所示:

在这里插入图片描述
然后写选中替换的具体实现功能逻辑,如下所示;

在这里插入图片描述
最后transformFun函数是具体的替换逻辑,根据不同的命令,返回对应的字符串。

在这里插入图片描述

添加右键菜单进行转换,需要在package.json中进行配置。如下所示:
在这里插入图片描述
添加快捷键功能,也需要在package.json中进行配置,部分示例如下所示:

在这里插入图片描述
到这里功能基本上就开发完了哈,完成之后可以看看实际效果是什么样子的。
在这里插入图片描述

七、拓展阅读


http://www.ppmy.cn/ops/136185.html

相关文章

RNN简单理解;为什么出现Transformer:传统RNN的问题;Attention(注意力机制)和Self-Attention(自注意力机制)区别;

目录 RNN简单理解 RNN n to n Transformer N to M LSTM 为什么出现Transformer:传统RNN的问题 信息丢失的后果 Rnn是顺序执行的效率不高:顺序执行 Attention(注意力机制)和Self-Attention(自注意力机制)区别 一、计算对象不同 二、应用场景不同 三、功能差异…

OceanBase 中常用的查询语句

本文汇总整理了一些 OceanBase 中的常用查询语句,包括租户创建、转储与合并、表相关等场景,希望帮大家解决日常运维操作中的常见的问题。 租户类 OceanBase支持多租户架构,其中默认存在一个名为sys的租户。为了满足业务使用需求,…

uni-app 修改复选框checkbox选中后背景和字体颜色

编写css(注意:这个样式必须写在App.vue里) /* 复选框 */ /* 复选框-圆角 */ checkbox.checkbox-round .wx-checkbox-input, checkbox.checkbox-round .uni-checkbox-input {border-radius: 100rpx; } /* 复选框-背景颜色 */ checkbox.checkb…

STM32完全学习——系统时钟设置

一、时钟框图的解读 首先我们知道STM32在上电初始化之后使用的是内部的HSI未经过分频直接通过SW供给给系统时钟,由于内部HSI存在较大的误差,因此我们在系统完成上电初始化,之后需要将STM32的时钟切换到外部HSE作为系统时钟,那么我…

NVR管理平台EasyNVR多个NVR同时管理:全方位安防监控视频融合云平台方案

EasyNVR是基于端-边-云一体化架构的安防监控视频融合云平台,具有简单轻量的部署方式与多样的功能,支持多种协议(如GB28181、RTSP、Onvif、RTMP)和设备类型(IPC、NVR等),提供视频直播、录像、回放…

【ChatGPT】让ChatGPT生成特定时间段或主题的文章

让ChatGPT生成特定时间段或主题的文章 ChatGPT能够根据指定时间段或主题生成内容,关键在于清晰地编写Prompt以提供足够的上下文和细节信息。本文将介绍如何通过有效的提示语设计,利用ChatGPT生成符合特定时间段或主题需求的文章。 一、为什么需要指定时…

OpenAI 是怎么“压力测试”大型语言模型的?

OpenAI 再次稍微揭开了它的安全测试流程的面纱。上个月,他们分享了一项调查的结果,这项调查研究了 ChatGPT 在根据用户名字生成性别或种族偏见的几率。现在,他们又发布了两篇论文,详细描述了如何对大型语言模型进行“压力测试”&a…

mac homebrew国内镜像源安装

最近换电脑了,需要安装homebrew,结果发现访问不了github,导致安装失败,报错信息如下: curl: (7) Failed to connect to raw.githubusercontent.com port 443 after 1 ms: Couldnt connect to server解决方法 使用国内…