mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
778 字
2 分钟
vscode插件开发初涉
2025-03-13

开发环境#

  1. Nodejs

  2. vscode

  3. 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 的启动性能,不推荐用于生产环境
  1. onStartupFinished
    • 在 VSCode 完成启动后激活扩展
    • 比 * 稍晚激活,但对启动性能影响较小
  2. onCommand
    • 当用户执行特定命令时激活扩展
    • 例如:onCommand.helloWorld
  3. onLanguage
    • 当打开特定语言的文件时激活扩展
    • 例如:onLanguage, onLanguage
  4. onView
    • 当特定视图可见时激活扩展
    • 例如:onView

其他激活事件#

  1. onUri
  2. onWebviewPanel
    • 当创建特定类型的 webview 面板时激活扩展
  3. onCustomEditor
    • 当打开自定义编辑器时激活扩展
  4. onDebug
    • 当启动调试会话时激活扩展
  5. onDebugInitialConfigurations
    • 当初始化调试配置时激活扩展
  6. onDebugResolve
    • 当解析特定类型的调试配置时激活扩展
  7. onFileSystem
    • 当访问特定文件系统方案时激活扩展
    • 例如:onFileSystem
  8. onTerminalProfile
    • 当创建特定终端配置文件时激活扩展
  9. onAuthenticationRequest
    • 当请求特定身份验证提供程序时激活扩展
  10. onSearch
    • 当执行搜索操作时激活扩展
  11. onTaskType
    • 当执行特定类型的任务时激活扩展
  12. onNotebook
    • 当打开特定类型的笔记本时激活扩展
  13. onTerminal
    • 当创建终端时激活扩展
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

vscode插件开发初涉
https://dreaife.tokyo/cn/vscode-plugin-dev/
作者
dreaife
发布于
2025-03-13
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

相关文章 智能推荐
1
新时代的第一轮筛选
life 随着AI技术的发展,使用先进模型的成本可能导致社会分层,只有经济能力强的人才能使用这些模型。虽然当前价格尚可,但未来价格的上涨可能使大多数人无法承担,从而形成第一轮筛选。作者对这种现象感到焦虑,同时也意识到AI的应用已超越编程领域,进入更广泛的产业。面对新世界的挑战与机遇,个人在时代的推动下不断探索。
2
博客迁移-Mizuki配置记录
infra 从notionNext迁移到mizuki的过程记录,主要原因是notionNext的限制。选择mizuki是因为其轻量级和良好的功能平衡,支持日记和项目展示。配置过程简单,内容通过md和ts文件控制,同时实现了与bangumi API的连接。计划通过CI同步notion内容,并进行多语言适配,解决了图片链接过期的问题。
3
心理记录1
psycho 意识到自己在抑制情感,反思过去的生活习惯导致对外界的恐惧和内心的静止。希望通过与世界的互动找到真实的自我,面对选择方向的责任感和可能性丢失的恐惧。真正的自我需要在探索中形成,而选择未来的方向意味着放弃其他可能性。
4
初涉正则表达式
prog-side 正则表达式是一种强大的文本模式匹配工具,能够描述和匹配字符串的特定模式。它包括字面值字符、特殊字符、字符类和元字符等元素,广泛应用于多种编程语言和文本处理工具中。正则表达式可以用于验证数据、替换文本和提取子字符串,具有灵活性和强大功能。常见的元字符和特性包括字符匹配、量词、边界匹配和分组等,能够帮助用户高效处理文本数据。
5
rabbitMQ初识
middle-side RabbitMQ是一个消息队列,支持同步和异步通讯,异步通讯通过中间人Broker解耦合,提升吞吐量和故障隔离。RabbitMQ的安装可通过Docker完成,支持多种消息模型,包括工作队列、发布/订阅和路由。SpringAMQP简化了RabbitMQ的使用,提供自动声明队列和异步接收消息的功能。消息转换器可使用JSON格式以提高可读性和效率。

目录