778 字
2 分钟
vscode插件开发初涉
开发环境
-
Nodejs
-
vscode
-
Yeoman&generator-code
为了方便生成插件项目的基础结构,可以使用 Yeoman 以及 VSCode 官方提供的插件生成器。打开终端,输入以下命令全局安装:
npm install -g yo generator-code
插件初始框架
创建插件
yo code生成器会询问以下问题:
- **选择扩展类型**:例如“New Extension (TypeScript)”或者“New Extension (JavaScript)”。- **扩展名称、描述**:根据提示填写想要的扩展名称和描述信息。- **Git 初始化**:是否初始化 Git 仓库。- **包管理器**:选择使用 npm 或 yarn。生成完成后,会得到一个初步搭建好的项目结构。
理解结构
打开生成的项目,会看到一些重要的文件和目录:
-
package.json这个文件定义了扩展的基本信息、依赖以及 VSCode 的激活事件和命令注册。
例如:
{"name": "my-sample-extension","displayName": "My Sample Extension","description": "A simple VSCode extension.","version": "0.0.1","engines": {"vscode": "^1.60.0"},"activationEvents": ["onCommand:extension.helloWorld"],"main": "./out/extension.js","contributes": {"commands": [{"command": "extension.helloWorld","title": "Hello World"}]},"scripts": {"vscode:prepublish": "npm run compile","compile": "tsc -p ./"},"devDependencies": {"typescript": "^4.0.0","vscode": "^1.1.37","@types/node": "^12.0.0"}} -
src/extension.ts****(或extension.js****)这是扩展的入口文件,当扩展被激活时会运行这里的代码。
例如,一个简单的示例:
import * as vscode from 'vscode';export function activate(context: vscode.ExtensionContext) {console.log('Congratulations, your extension "my-sample-extension" is now active!');let disposable = vscode.commands.registerCommand('extension.helloWorld', () => {vscode.window.showInformationMessage('Hello World from your VSCode extension!');});context.subscriptions.push(disposable);}export function deactivate() {}
运行和调试
- 打开项目后,在 VSCode 的调试面板中,可以看到一个
Launch Extension的配置。 - 按下
F5,VSCode 将启动一个新的扩展开发主机(Extension Development Host)。 - 在新的窗口中,通过命令面板(
Ctrl+Shift+P或Cmd+Shift+P)输入注册的命令,比如输入 “Hello World” 来测试扩展是否正常工作。
发布插件
当开发完成并测试好之后,可以考虑将插件发布到 VSCode Marketplace 供其他人使用:
-
安装
vsce工具帮助打包和发布扩展:npm install -g vsce -
在项目根目录下运行打包命令:
vsce package -
根据 官方文档 的指引,完成发布流程。
具体开发
插件启动
VSCode 扩展通过 package.json 中的 activationEvents 数组来定义何时激活扩展。以下是主要的激活事件类型:
常用激活事件
-
- 在 VSCode 启动时立即激活扩展
- 优点:扩展始终可用
- 缺点:会影响 VSCode 的启动性能,不推荐用于生产环境
- onStartupFinished
- 在 VSCode 完成启动后激活扩展
- 比 * 稍晚激活,但对启动性能影响较小
- onCommand
- 当用户执行特定命令时激活扩展
- 例如:onCommand
.helloWorld
- onLanguage
- 当打开特定语言的文件时激活扩展
- 例如:onLanguage
, onLanguage
- onView
- 当特定视图可见时激活扩展
- 例如:onView
其他激活事件
- onUri
- 当打开特定 URI 时激活扩展
- 例如:onUri:https://my-extension.com
- onWebviewPanel
- 当创建特定类型的 webview 面板时激活扩展
- onCustomEditor
- 当打开自定义编辑器时激活扩展
- onDebug
- 当启动调试会话时激活扩展
- onDebugInitialConfigurations
- 当初始化调试配置时激活扩展
- onDebugResolve
- 当解析特定类型的调试配置时激活扩展
- onFileSystem
- 当访问特定文件系统方案时激活扩展
- 例如:onFileSystem
- onTerminalProfile
- 当创建特定终端配置文件时激活扩展
- onAuthenticationRequest
- 当请求特定身份验证提供程序时激活扩展
- onSearch
- 当执行搜索操作时激活扩展
- onTaskType
- 当执行特定类型的任务时激活扩展
- onNotebook
- 当打开特定类型的笔记本时激活扩展
- onTerminal
- 当创建终端时激活扩展
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
vscode插件开发初涉
https://dreaife.tokyo/vscode-plugin-dev/ 部分信息可能已经过时
相关文章 智能推荐
1
关于一次EOA钱包的签名验证及其相关内容
WEB3 从 EOA 钱包签名验证出发,梳理 secp256k1、ECDSA、r/s/v、公钥恢复与 keccak-256 地址计算,说明 SIWE 登录中后端如何在不接触私钥的情况下验证钱包地址控制权。
2
一个对于EOA的EVM钱包登陆界面
WEB3 基于一个 EVM/EOA 钱包登录界面,梳理 connect wallet、SIWE 签名消息、wagmi 签名请求、nonce 与后端验签流程,解释钱包登录为什么需要先连接地址再签名证明控制权。
3
新时代的第一轮筛选
life 本篇文章探讨了在AI快速发展背景下,使用先进模型的成本将成为新一轮社会筛选的关键因素。作者表达了对模型使用费用上升可能导致的数字鸿沟的焦虑,指出当使用费用从当前的补贴价提升至更高水平时,普通用户可能难以负担,从而形成技术使用的阶层分化。文章还回顾了AI在安全、视频、音乐等领域的多元应用,强调AI正从编码工具向更广泛的产业渗透。作者以个人视角阐述了在资本有限的情况下,如何在时代浪潮中摸索前行,并呼吁关注技术成本对大众使用的影响。关键词:AI 模型成本、数字鸿沟、技术筛选、AI 应用、时代焦虑。
4
博客迁移-Mizuki配置记录
infra 从notionNext迁移到mizuki的过程记录,主要原因是notionNext的限制。选择mizuki是因为其轻量级和良好的功能平衡,支持日记和项目展示。配置过程简单,内容通过md和ts文件控制,同时实现了与bangumi API的连接。计划通过CI同步notion内容,并进行多语言适配,解决了图片链接过期的问题。
5
心理记录1
psycho 意识到自己在抑制情感,反思过去的生活习惯导致对外界的恐惧和内心的静止。希望通过与世界的互动找到真实的自我,面对选择方向的责任感和可能性丢失的恐惧。真正的自我需要在探索中形成,而选择未来的方向意味着放弃其他可能性。





