首页 > 其他分享 >如何实现一个vscode插件

如何实现一个vscode插件

时间:2023-04-14 11:59:29浏览次数:37  
标签:文件 插件 extension 命令 vscode 如何 test

前言

  • 有时候,需要提高一些开发效率,我们通常会使用一些优秀的代码编辑器,比如vscode。在使用vscode的时候,会用到很多插件,有时候也会萌发想要去开发这个插件的念头。既然想到了,那就动手试一下。

开发过程

我感觉最快的上手方式不是讲一些虚头巴脑的概念,先去试一下怎么去实现一个简单的插件,写得多了自然就会了。

工具安装

  • vscode官方提供了一个cli工具,先全局安装一下,npm install -g yo generator-code
  • 使用yo code在根目录下生成初始插件项目,会让选择新建一个什么类型的插件。
  • 这里我们就用最基础的第一个选项来作演示,然后会提示你填写插件名称、描述、是否使用git仓库,使用哪个包管理器等等,自己看着提示填写,会得到以下目录:

包名

node_modules 依赖的第三方包
src

test (测试用的,自己开发一般用不到,可以直接打开使用vscode进行调试,可以删掉)
extension.ts 插件的入口文件

eslintrc.json eslint配置
.vscodeignore 这个是往vscode商店push的时候需要忽略的文件配置
CHANGELOG.md 插件的版本更新日志
package.json 项目的配置文件
README.md 插件的介绍文件
tsconfig.json ts的配置文件
vsc-extension-quickstart.md 这个是关于这个插件的简单介绍的说明文件
webpack.config.js 打包的配置

主要文件理解以及改动

  • extension.ts,这个生成的主文件入口其实就只是实现了一个最简单的命令,以及将该命令挂载到全局上下文中。
// 所有的vscode相关的api都在这个包里面,想要使用vscode提供的api能力,就必须引用这个包
import * as vscode from 'vscode';

// 当你的插件激活的时候会触发这个方法,至于什么时机触发,下一个文件中会提到
export function activate(context: vscode.ExtensionContext) {
	console.log('Congratulations, your extension "test-vscode-extension" is now active!');

       // 这个是给命令"test-vscode-extension.helloWorld"注册一个回调函数,第二个参数是这个命令触发时的回调
       // 命令的触发可以通过两种方式去触发,一种是增加keybinds的配置,通过按键组合去触发,一种就是直接在vscode中直接`cmd + shift + P`来执行对应的命令。
	let disposable = vscode.commands.registerCommand('test-vscode-extension.helloWorld', () => {
		vscode.window.showInformationMessage('Hello World from test vscode extension!'); // 使用自带的api,在编辑器下方toast出一个提示文案。
	});

        // 将新注册的命令回调挂载到当前的插件上下文中,这一步很关键,基本后面很多时候会用到
        // 自定义的一些命令、snippets都得通过这样的方式进行添加,不然就无法生效
	context.subscriptions.push(disposable);
}

// 当你的插件停止工作的时候,就会调用这个方法,通常一般的插件是用不上的,可以忽略
export function deactivate() {}
  • package.json,关于上面的激活时机以及触发方式都是在这个里面进行配置的,主要只看相关的配置项
{
  ...
  "activationEvents": [], // 这个就是插件激活的时机,为空就是安装了打开啥文件都会激活,也可以指定对应的文件类型来激活,比如"onLanguage:javascript","onLanguage:javascriptreact"等等
  "main": "./dist/extension.js",
  "contributes": {
    "commands": [
      {
        "command": "test-vscode-extension.helloWorld", // 注册一个命令,这个就是上面添加回调的命令本令了
        "title": "Hello World" // 这个是命令的title,也就是你使用`cmd + shift + P`打开运行命令窗口时,需要输入的命令
      },
      "keybindings": [
        {
          "command": "test-vscode-extension.helloWorld", // 这个就是上面说的一种命令绑定的形式
          "key": "ctrl+alt+1", // windows系统上的组合键 
          "mac": "shift+cmd+1", // mac系统上的组合键
          "when": "editorTextFocus" // 当编辑器聚焦时可以触发
        }
      ],
    ]
  },
  "scripts": {
    "vscode:prepublish": "npm run package", // 这个是把包push到vscode商店的命令,这个需要提前去vscode注册一个账号,生成对应的秘钥,用来发布使用
    "compile": "webpack", // 打包当前文件,只有打包过后再进行调试才能看到最新的效果
    "watch": "webpack --watch", // 打包并监听文件改动
    "package": "webpack --mode production --devtool hidden-source-map", // 打包并去掉sourcemap文件
    "compile-tests": "tsc -p . --outDir out", // 编译测试文件
    "watch-tests": "tsc -p . -w --outDir out", // 编译测试文件并监听
    "pretest": "npm run compile-tests && npm run compile && npm run lint", // 启动编译并运行eslint检测
    "lint": "eslint src --ext ts", // 启动eslint检测
    "test": "node ./out/test/runTest.js" // 启动测试
  },
  ...
}

开始调试

  • 调试之前建议先把整个目录移到一个新的vscode窗口中打开,因为存在多项目的话,还需要手动去配置对应的测试配置。
  • 在新的vscode窗口中按F5就可以进入调试模式,就会自动打开一个调试窗口,随便打开一个文件。
  • 先使用cmd + shift + P开始命令启动窗口,输入Hello World就可以启动命令,效果如下

  • 换着使用上面绑定的组合键cmd + shift + 1也会出现一样的效果。

小结

  • 这里只是一个简单的抛砖引玉,一个好的插件,肯定不会这么简单,但是开发vscode插件的核心就是多看vscode提供的api能力,以及它的package.json中的配置。
  • 本人自己在工作上为团队提供了一个vscode插件Mlib Snippets,主要是提供一些通用组件的属性提示、说明、补全等等功能,有兴趣的可以直接在vscode extension市场中搜索。

标签:文件,插件,extension,命令,vscode,如何,test
From: https://www.cnblogs.com/aloneMing/p/17317852.html

相关文章

  • 微服务:如何在一个服务中调用另一个服务的接口(使用http请求)?
    也就是在Java代码中发起http请求,并获取响应信息。  一、注册RestTemplate对象@BeanpublicRestTemplaterestTemplate(){returnnewRestTemplate();}二、使用RestTemplate发起请求//注入restTemplate对象@AutowiredprivateRestTempaterestTemplate;publ......
  • 如何快速开发软件?这篇文章说明白了
    随着经济迅速发展,传统软件开发模式存在研发周期长、需求转化困难、投入成本高等问题,无法适应当前业务发展速度,市场需要快速开发工具。快速开发软件可分为代码生成类、少代码类、零代码功能配置类。代码生成类相对灵活,但对用户要求高;低代码类适应性强,但对研发人员要求高;零代码功能......
  • 如何克服拖延症
     你是否想过那些让你遗憾的未完成的事情?塞满硬盘的那些没看过的电影、书架上落满灰尘的书籍、因为各种原因推迟的老朋友聚会等等,你想象着终有一天会将它们一一完成,可是却发现积累的事情越来越多,你一再拖延,一样也没有完成。如果你对上述这些例子都有着强烈的熟悉感,那么"恭喜你"你......
  • 如何做一名优秀的团队领导?LinkedIn CEO给出的3条建议
    1.Focus 专注。是的,你原来肯定听过这一点,“专注”几乎都快成硅谷人的口头禅了。创办一家公司需要创业者全身心的投入,所以专注对于创业者显得格外重要。但不同于以往的解读,Jeff也提出了自己对于“专注”一些独到的看法。 Jeff在雅虎任职期间,雅虎开拓了大量的业务,包括搜索、新闻......
  • Eclipse 安装 ABAP 插件报错 Microsoft Visual C++ 2013 (x64) 快速解决
     去官网下载MicrosoftVisualC++2013(x64)安装   DownloadVisualC++RedistributablePackagesforVisualStudio2013fromOfficialMicrosoftDownloadCenter   ......
  • PDCA循环模型——如何用同样的时间做更多的事?【No.1 】
    PDCA循环模型,又称戴明环,是一个持续改进模型。PDCA循环包括以下内容:Plan阶段:确认目标,制定计划Do阶段:执行措施和计划Check阶段:检查验证,评估效果Action阶段:有效措施标准化,处理遗留问题首先要考虑做什么,对现状分析,列出目标,制定总体策略;然后去行动,设计实施方案和具体实施;行动后......
  • Firefox如何指定安装位置
    使用离线安装包即可,下载地址:选择您想要下载的Firefox浏览器语言版本......
  • 如何轻松的下载海外镜像
    简介在云计算和云原生环境下,我们会经常使用到海外镜像部署服务,如谷歌镜像仓库(k8s.gcr.io、gcr.io),还有RedHat镜像仓库(quay.io),遇到此类镜像仓库由于某种神秘力量,我们在国内是无法直接下载,本片文章将介绍如何在不魔法上网的情况下下载海外镜像。仓库名称k8s组件镜像k8s.......
  • 如何使用海康demo工具配置将设备接入SkeyeVSS平台?​
    SkeyeVSS平台视频能力丰富齐全,部署灵活,操作简单,可快速接入多类型设备及协议,具体包括国标GB28181、RTMP、RTSP/Onvif、海康SDK、大华SDK、海康Ehome等,以及近期额外拓展的华为SDK、宇视SDK、萤石SDK、乐橙SDK等;在视频流分发方面,RTSP、FLV、HLS、WebRTC等格式均可在全终端、平台实现视......
  • 跨网摆渡系统如何实现数据安全交换,从而驱动业务流转?
    在这个数据驱动的时代,一次数据泄露就可能影响到数亿甚至数十亿人。数字化转型进一步推动了数据的移动,而随着攻击者加速利用日常生活中的数据依赖性,数据泄露也正随之扩大。一旦边界的防线被攻破或绕过,攻击者就可以在数据中心内部横向移动,而中心内部基本没有安全控制的手段可以阻止......