0

0

怎么做VSCode扩展_VSCode自定义插件开发与发布完整流程教程

看不見的法師

看不見的法師

发布时间:2025-08-30 14:34:01

|

496人浏览过

|

来源于php中文网

原创

答案:本文介绍VSCode扩展开发全流程,从环境搭建、项目生成、命令注册、调试方法到发布步骤,并讲解激活事件选择与Webview自定义UI实现。

怎么做vscode扩展_vscode自定义插件开发与发布完整流程教程

VSCode扩展开发其实并不难,关键在于理解其架构和掌握一些基本API。本文将带你一步步完成一个VSCode自定义插件的开发和发布,让你快速上手。

解决方案

首先,你需要安装Node.js和npm(或yarn)。这是开发VSCode扩展的基础环境。确保你的Node.js版本在14以上,npm版本在6以上。

接下来,全局安装Yeoman和VS Code Extension Generator:

npm install -g yo generator-code

现在,你可以使用Yeoman生成一个基本的扩展项目:

yo code

按照提示选择 "New Extension (TypeScript)",然后输入你的扩展名、描述等信息。

项目生成后,你会看到一个包含

src
目录、
package.json
文件等标准结构的VSCode扩展项目。
src/extension.ts
是你的扩展的主要入口点。

打开

src/extension.ts
,你会看到一个
activate
函数。这个函数在你的扩展被激活时调用。在这里,你可以注册你的命令、事件监听器等。

例如,我们可以注册一个简单的命令,当用户执行该命令时,显示一个消息框:

import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {

    let disposable = vscode.commands.registerCommand('my-extension.helloWorld', () => {
        vscode.window.showInformationMessage('Hello World from My Extension!');
    });

    context.subscriptions.push(disposable);
}

export function deactivate() {}

package.json
文件中,你需要定义你的命令:

{
  "name": "my-extension",
  "displayName": "My Extension",
  "description": "A simple VS Code extension",
  "version": "0.0.1",
  "engines": {
    "vscode": "^1.63.0"
  },
  "categories": [
    "Other"
  ],
  "activationEvents": [
    "onCommand:my-extension.helloWorld"
  ],
  "main": "./out/extension.js",
  "contributes": {
    "commands": [
      {
        "command": "my-extension.helloWorld",
        "title": "Hello World"
      }
    ]
  },
  "scripts": {
    "vscode:prepublish": "npm run compile",
    "compile": "tsc -p ./",
    "watch": "tsc -watch -p ./",
    "pretest": "npm run compile && npm run lint",
    "lint": "eslint src --ext ts",
    "test": "node ./out/test/runTest.js"
  },
  "devDependencies": {
    "@types/vscode": "^1.63.0",
    "@types/glob": "^7.1.4",
    "@types/mocha": "^9.0.0",
    "@types/node": "14.x",
    "@typescript-eslint/eslint-plugin": "^5.1.0",
    "@typescript-eslint/parser": "^5.1.0",
    "eslint": "^8.1.0",
    "glob": "^7.1.4",
    "mocha": "^9.0.2",
    "typescript": "^4.5.4",
    "@vscode/test-electron": "^1.6.2"
  }
}

注意

activationEvents
contributes.commands
部分。
activationEvents
定义了激活扩展的事件,
contributes.commands
定义了你的命令。

现在,你可以使用VS Code的调试功能来测试你的扩展。按下

F5
,VS Code会打开一个新的窗口,其中加载了你的扩展。在新窗口中,按下
Ctrl+Shift+P
(或
Cmd+Shift+P
),输入你的命令名(例如,"Hello World"),然后执行它。你应该看到一个消息框。

发布你的扩展需要创建一个Visual Studio Code Marketplace账号。

在VS Code中安装

vsce
(Visual Studio Code Extensions)工具:

npm install -g vsce

登录你的Visual Studio Code Marketplace账号:

vsce login <你的publisher名称>

打包你的扩展:

vsce package

发布你的扩展:

vsce publish

发布后,你的扩展就可以在Visual Studio Code Marketplace上找到了。

Yodayo
Yodayo

一个专为动漫迷和vTuber打造的AI艺术创作平台、交流社区

下载

如何调试VS Code扩展?

调试VS Code扩展的核心在于使用VS Code提供的调试工具。首先,确保你的扩展项目已经配置了

launch.json
文件。这个文件定义了调试配置。

一个典型的

launch.json
文件可能如下所示:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "extensionHost",
      "request": "launch",
      "name": "Launch Extension",
      "runtimeExecutable": "${execPath}",
      "args": [
        "--extensionDevelopmentPath=${workspaceFolder}"
      ],
      "stopOnEntry": false
    }
  ]
}

在这个文件中,

type
指定为
extensionHost
,表示这是一个扩展调试配置。
runtimeExecutable
指定了VS Code的可执行文件路径,
args
指定了启动参数,其中
--extensionDevelopmentPath
指定了你的扩展项目的路径。

设置断点后,按下

F5
启动调试。VS Code会打开一个新的窗口,其中加载了你的扩展。当代码执行到断点时,程序会暂停,你可以查看变量的值、调用堆栈等信息。

此外,你还可以在

output
面板中查看扩展的输出信息,例如
console.log
的输出。

VS Code扩展的激活事件有哪些?如何选择合适的激活事件?

VS Code扩展的激活事件定义了何时激活你的扩展。选择合适的激活事件可以提高VS Code的性能。

常见的激活事件包括:

  • onCommand:<command>
    :当用户执行指定的命令时激活。
  • onFileSystem:<scheme>
    :当访问指定的文件系统时激活,例如
    onFileSystem:file
    表示访问本地文件系统时激活。
  • onLanguage:<language>
    :当打开指定语言的文件时激活,例如
    onLanguage:javascript
    表示打开JavaScript文件时激活。
  • onView:<viewId>
    :当打开指定的视图时激活。
  • onWebviewPanel:<viewType>
    :当打开指定的Webview面板时激活。
  • *
    :在VS Code启动时立即激活。不推荐使用,因为它会降低VS Code的启动速度。

选择合适的激活事件需要根据你的扩展的功能来决定。如果你的扩展只在用户执行某个命令时才需要激活,那么使用

onCommand
是最合适的。如果你的扩展需要处理特定语言的文件,那么使用
onLanguage
是最合适的。

例如,如果你的扩展提供JavaScript代码片段,那么你可以使用

onLanguage:javascript
作为激活事件。

如何使用Webview API创建自定义UI界面?

Webview API允许你在VS Code中创建自定义的UI界面。Webview实际上是一个嵌入在VS Code中的浏览器窗口,你可以使用HTML、CSS和JavaScript来构建你的UI界面。

首先,你需要创建一个

WebviewPanel

const panel = vscode.window.createWebviewPanel(
  'myWebview', // Webview的ID
  'My Webview', // Webview的标题
  vscode.ViewColumn.One, // Webview显示的位置
  {
    enableScripts: true, // 允许Webview执行JavaScript
    retainContextWhenHidden: true // 当Webview不可见时,保持其状态
  }
);

然后,你需要设置Webview的内容:

panel.webview.html = `
  <!DOCTYPE html>
  <html>
  <head>
    <title>My Webview</title>
  </head>
  <body>
    <h1>Hello from Webview!</h1>
    <button id="myButton">Click me</button>
    <script>
      const button = document.getElementById('myButton');
      button.addEventListener('click', () => {
        alert('Button clicked!');
      });
    </script>
  </body>
  </html>
`;

你可以使用

panel.webview.postMessage
方法从扩展向Webview发送消息,使用
panel.webview.onDidReceiveMessage
方法在扩展中接收来自Webview的消息。这允许你在扩展和Webview之间进行双向通信。

例如,从扩展向Webview发送消息:

panel.webview.postMessage({ command: 'update', text: 'Hello from extension!' });

在Webview中接收消息:

window.addEventListener('message', event => {
  const message = event.data; // The json data that the extension sent
  switch (message.command) {
    case 'update':
      alert(message.text);
      break;
  }
});

Webview API提供了强大的功能,允许你创建各种自定义UI界面,例如配置面板、代码预览、数据可视化等。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

47

2026.02.13

TypeScript全栈项目架构与接口规范设计
TypeScript全栈项目架构与接口规范设计

本专题面向全栈开发者,系统讲解基于 TypeScript 构建前后端统一技术栈的工程化实践。内容涵盖项目分层设计、接口协议规范、类型共享机制、错误码体系设计、接口自动化生成与文档维护方案。通过完整项目示例,帮助开发者构建结构清晰、类型安全、易维护的现代全栈应用架构。

194

2026.02.25

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

457

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

547

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

335

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

443

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

605

2023.08.10

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
go语言零基础开发内容管理系统
go语言零基础开发内容管理系统

共34课时 | 2.7万人学习

第二十三期_前端开发
第二十三期_前端开发

共98课时 | 8.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号