VSCode插件开发概述

news2024/9/27 15:19:46

目录

  • VSCode插件开发概述
    • vscode插件
    • vscode插件的用途
    • 脚手架安装
    • 重要文件
      • package.json
        • activationEvents
      • extension.js
      • 一个简单的例子
      • 本地打包

VSCode插件开发概述

vscode插件

vscode 是微软推出的一款轻量级代码编辑器,在使用的时候总会需要安装一些插件去协助我们进行开发,这些插件就是利用 vscode 开放的一些 API 的基础上进行扩展功能的开发,从而解决开发中的一些问题,提高生产效率。
这种插件化思想一方面使该代码编辑器更轻量化,另一方面能够充分利用社区的力量,提供更加多元化的插件。

vscode插件的用途

vscode 提供的拓展能力包括:

  • 通用功能:能够添加命令、配置项、快捷键、菜单项、右键菜单;存储工作区或全局数据;展示通知信息;打开文件选择器让用户去选择文件或文件夹等
  • 主题化:控制 vscode 的外观
  • 声明性语言特性:为编程语言添加了基本的文本编辑支持,例如括号匹配、自动缩进和语法突出显示
  • 程序语言特性:编程语言功能添加了丰富的编程语言支持,例如悬停、转到定义、诊断错误等
  • 扩展工作台:工作台是指包含标题栏、活动栏、侧边栏、控制板、编辑组、状态栏等UI组件的整体UI,vscode 提供了各种 API,允许将自己的组件添加到工作台

脚手架安装

为了方便vscode插件的开发,官方提供了脚手架生成对应的项目。

  • npm install -g yo generator-code会安装两个包
  • yo模块全局安装后就安装了 Yeoman,Yeoman 是通用型项目脚手架工具,可以根据一套模板生成一个对应的项目结构
  • generator-code模块是 VSCode 扩展生成器,与 yo 配合使用才能构建项目
// 安装需要的包
npm install -g yo generator-code

// 运行
yo code

如果出现以下报错,可以查看是否是因为权限受限

在这里插入图片描述

在终端输入get-ExecutionPolicy查看执行策略/权限
输出Restricted(受限制的)
终端输入Set-ExecutionPolicy -Scope CurrentUser命令给用户赋予权限
输入RemoteSigned
终端输入get-ExecutionPolicy查看一下权限,显示RemoteSigned就可以了

重要文件

在项目生成之后,目录结构如下所示。其中主要文件是插件入口文件extension.js 和 配置文件package.json

package.json

package.json是 vscode 扩展的清单文件,里面有很多字段,官方对每个字段都进行了详细阐述。在清单文件中,activationEventsmain以及contributes,是整个文件的重中之重。

  • main:定义了插件的主入口
  • contributes:注册,通过扩展注册 contributes 用来扩展 vscode 中的各项技能,有多个配置
  • activationEvents:激活,在这里定义插件要在什么情况下会被激活,激活后的插件才能被正常使用,官网罗列了很多激活的时机,我们可以按需设置对应的时机
  "name": "firstplugindemo",  // 插件名
  "displayName": "FirstPluginDemo",  // 显示在应用市场的名字
  "description": "",  // 对插件的描述
  "version": "0.0.1",  // 插件的版本号
  "engines": {
    "vscode": "^1.76.0"  // 最低支持的vscode版本
  },
  "categories": [
    "Other"  // 扩展类别
  ],
  // 扩展的激活事件,在哪些事件情况下被激活
  "activationEvents": [
    "onCommand: extension.helloWorld",
    "onCommand: we"
  ],
  // 插件的主入口文件
  "main": "./extension.js",
  // 贡献点
  "contributes": {
    // 命令
    "commands": [
      {
        "command": "extension.helloWorld",
        "title": "Hello World"
      },
      {
        "command": "we",
        "title": "we are"
      }
    ]
  },
activationEvents

activationEvents 是在 package.json 扩展清单中的一组 JSON 声明,当激活事件发生时,扩展程序将被激活。
可用激活事件有:

  • onLanguage:打开解析为特定语言文件时被激活,例如 onLanguage:python
  • onCommand:在调用命令时被激活
  • onDebug:在调试会话开始之前被激活
  • workspaceContains:每当打开文件夹并且该文件夹包含至少一个与 glob 模式匹配的文件时
  • onFileSystem:每当读取来自特定方案的文件或文件夹时
  • onView:每当在 vscode 侧栏中展开指定 id 的视图
  • onUri:每当打开该扩展的系统范围的 Uri 时
  • * :只要一启动 vscode,插件就会被激活
  • onStartupFinished:类似于 * 激活事件,在启动后的一段时间内被激活,但不会减慢 vscode 的启动速度

extension.js

入口文件,也就是 package.json 中 main 字段对应的文件,在这个文件中会导出两个方法,activatedeactivate

  • activate:插件被激活时执行的函数
  • deactivate:插件被销毁时调用的方法,比如释放内存等
const vscode = require('vscode');

// 插件被激活时
function activate(context) {
	// 插件被激活时只会实现一次
	console.log('Congratulations, your extension "firstplugindemo" is now active!');

	// 命令已经在 package.json 文件中定义过了,为命令绑定事件
	// 实现这个命令
	let disposable = vscode.commands.registerCommand('extension.helloWorld', function () {
		// 每次执行命令时都会实现这里的代码
		vscode.window.showInformationMessage('Hello World');
	});
	// 事件入栈
	context.subscriptions.push(disposable);

	context.subscriptions.push(vscode.commands.registerCommand('we',()=> {
		vscode.window.showInformationMessage('you are so beautiful')
	}))
}

// 插件注销时
function deactivate() {}

module.exports = {
	activate,
	deactivate
}

一个简单的例子

  • 在 package.json 的 contributes.commands 中注册了一个名为 extension.helloWorld 的命令
  • 在 package.json 的 activationEvents 中指定当 onCommand 命令被调用时,执行注册过的命令 extension.helloWorld
  • 在 extension.js 中实现定义的命令 extension.helloWorld,会弹出一个信息框显示 Hello World
// package.json
  // 在这里定义了,当命令被执行时,去执行之前定义过的命令 extension.helloWorld
  "activationEvents": [
    "onCommand: extension.helloWorld",
  ],

  // 在这里注册了一个命令 extension.helloWorld
  "contributes": {
    "commands": [
      {
        "command": "extension.helloWorld",
        "title": "Hello World"
      },
    ]
  },
  
  "main": "./extension.js", // 入口文件
// extension.js
const vscode = require('vscode');

// 插件被激活时
function activate(context) {
    // 在这里实现这个定义的命令
	context.subscriptions.push(vscode.commands.registerCommand('extension.helloWorld',()=> {
		vscode.window.showInformationMessage('Hello World')
	}))
}

运行时 ctrl+f5 会打开一个新窗口,ctrl+shift+P 输入 Hello World 执行对应命令,会看到右下角弹出 HelloWorld 的提示。


如果在 ctrl+shift+P 命令面板中输入定义的命令没有找到对应命令时,可以看一下 package.json 中 vscode 的版本是不是不合适

本地打包

打包成 vsix 插件,通过安装 vsix 文件安装插件。

// 安装对应模块 vsce
npm i vsce -g

// 利用vsce进行打包,生成对应的vsix文件
vsce package

生成好的 vsix 文件不能直接拖入安装,需要从扩展的右上角选择Install from VSIX安装。

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

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

相关文章

[代码学习]einsum详解

einsum详解 该函数用于对一组输入 Tensor 进行 Einstein 求和,该函数目前仅适用于paddle的动态图。 Einstein 求和是一种采用 Einstein 标记法描述的 Tensor 求和,输入单个或多个 Tensor,输出单个 Tensor。 paddle.einsum(equation, *opera…

Win11自定义目录安装Linux子系统wsl

1. 启用适用于 Linux 的 Windows 子系统和虚拟机功能 以管理员身份打开 PowerShell(“开始”菜单 >“PowerShell” >单击右键 >“以管理员身份运行”),然后依次输入执行以下命令: dism.exe /online /enable-feature /f…

3ds Max渲染太慢?创意云“一键云渲染”提升3ds Max渲染体验

在数字艺术设计领域,3ds Max是广泛使用的三维建模和渲染软件之一。然而,许多用户都面临着一个共同的问题:渲染速度太慢。渲染一帧画面需要耗费数小时,让人无法忍受。除了之前给大家介绍的几种解决方法外: …

【斗破年番】导演紧急删减第66集预告,陨落心炎事件要重演?

Hello,小伙伴们,我是小郑继续为大家深度解析斗破苍穹年番最新资讯。 斗破苍穹年番第65集已经出来了,在这一集出来后按例官方放出来第66集和第67集的预告。只是让小郑没有想到的是,刚开始看第66集预告还好好的,但是等到再看的时候就…

代理SSL证书的优势——JoySSL

随着互联网的发展,越来越多的企业和个人开始使用网站来提供服务和信息。而SSL证书作为保障网站安全的重要工具,也逐渐被广泛应用。然而,对于许多企业和个人来说,购买和安装SSL证书是一项昂贵的任务。这就需要代理SSL证书的出现&am…

SLAM从入门到精通(camera数据读取)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 实际ros开发的时候,现场有很多特征都可以用来进行采集和标定。比如说地面,对于外资企业或者管理比较规范的企业来说&#x…

UNet及其变体在医学图像分割中的性能分析

论文链接:https://arxiv.org/abs/2309.13013 机构:英国伦敦布鲁内尔大学 日期:20230922 因为太长了长达37页所以我也就记点重点内容了hhh,我重点关注的还是在Unet以及其变体上,不过感觉严格意义上来说里面提到的方法不算很新&a…

嵌入式C语言中整形溢出问题分析

整型溢出有点老生常谈了,bla, bla, bla… 但似乎没有引起多少人的重视。整型溢出会有可能导致缓冲区溢出,缓冲区溢出会导致各种黑客攻击。 今天分享一篇文章,希望大家都了解一下整型溢出,编译器的行为,以及如何防范&a…

【安全】 Java 过滤器 解决存储型xss攻击问题

文章目录 XSS简介什么是XSS?分类反射型存储型 XSS(cross site script)跨站脚本攻击攻击场景解决方案 XSS简介 跨站脚本( cross site script )为了避免与样式css(Cascading Style Sheets层叠样式表)混淆,所以简称为XSS。 XSS是一种经常出现在web应用中的计算机安全…

mistyR官网教程 空转spatial

Modeling spatially resolved omics with mistyR • mistyR (saezlab.github.io) mistyR and data formats • mistyR (saezlab.github.io) Heidelberg University and Heidelberg University Hospital, Heidelberg, Germany Jožef Stefan Institute, Ljubljana, Sloveniajov…

阿里5年经验之谈 —— 浅谈自动化测试方法!

导读 在当今快节奏的软件开发环境中,高质量的代码交付至关重要。而针对经过多次迭代,主要功能趋向稳定的产品,大量传统的重复性手动测试方法已经无法满足高效、快速的需求。为了提高测试效率保证产品质量,本文通过产品实践应用&a…

Python接口自动化测试之token参数关联

前言 在做自动化接口测试时,有时候会遇到token的动态关联,例如查询余额接口,需要关联登录接口的token动态值,如何利用python脚本进行接口token关联呢?今天我们爱学习一下吧! 一:获取登录接口返回的token…

研发项目管理系统对比:找到最适合的高效工具

研发部门是企业非常重要的部门,代表着企业未来能否在市场上拥有优秀的技术,站稳市场份额。很多企业的研发方式往往是瀑布式的,所以项目的阶段规划,然后每个阶段的需求分配给开发人员,可以随时查看每个需求的开发进度和…

Redis学习5——有序集合Zset数据类型的操作

有序集合Zset 常用命令 数据结构 跳跃表 跳跃表

移远通信EM060K系列LTE-A Cat 6模组完成全球认证覆盖

近日,移远通信LTE-A Cat 6模组EM060K系列顺利完成全球认证覆盖,将以卓越的性能和品质助力海内外客户终端大规模部署,为其提供畅快的高速网络连接。同时,凭借着有竞争力的性能和成本优势,EM060K系列将加速释放海外固定无…

[架构之路-235]:目标系统 - 纵向分层 - 数据库 - 数据库系统基础与概述:数据库定义、核心概念、系统组成

目录 一、核心概念 1.1 什么是数据与信息 1.2 数据与数据库的关系 1.3 什么是数据库 1.4 数据库中的数据的特点 1.5 数据库与数据结构的关系 二、数据库系统 2.1 什么是数据库管理系统 2.2 什么是数据库系统 2.3 数据库相关的人员 2.4 数据库的主要功能 2.5 Excel表…

Vuex的基础使用存值及异步

目录 一、概述 ( 1 ) 讲述 ( 2 ) 概念 ( 3 ) 作用 二、取值 1. 安装 2. 菜单栏 3. 模块 4. 引用 三、改值 四、异步&后台请求 带来的获取 一、概述 ( 1 ) 讲述 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的…

【Linux初阶】多线程1 | 页表的索引作用,线程基础(优缺点、异常、用途),线程VS进程,线程控制,C++多线程引入

文章目录 ☀️一、深入理解页表☀️二、Linux线程概念🌻1.什么是线程(重点)⚡(1)线程的概念⚡(2)线程库初识 🌻2.线程的优点🌻3.线程的缺点🌻4.线程异常&…

为什么设置静态代理IP后无法正常上网,怎么解决?

静态代理IP是一个固定的IP地址,因为其出色的稳定性和安全性而得到广泛应用,常用于一些对网络质量要求高、需要长期稳定和持续可靠连接的业务。设置静态代理IP后无法上网是用户常见的网络问题,通常有多种原因: 1. 静态代理IP不可用…

【Flutter学习】AppBar

App Bar 可以视为页面的标题栏,在 Flutter 中用AppBar组件实现。 一个简单的AppBar实现代码如下: import package:flutter/material.dart;void main() {runApp(const AppBarTest()); }class AppBarTest extends StatelessWidget {const AppBarTest({Key…