VSCode 插件开发完整指南:从零到发布

VSCode 插件开发完整指南:从零到发布

前言

VSCode 作为当今最受欢迎的代码编辑器之一,其强大的扩展生态系统为开发者提供了无限的可能性。本文将带你从零开始,学习如何使用 TypeScript 开发一个 VSCode 插件,并最终发布到 Marketplace。

一、开发环境准备

必需工具

  • Node.js:建议使用 LTS 版本(16.x 或更高)
  • npmyarn:包管理工具
  • VSCode:最新版本
  • TypeScript:用于插件开发的主要语言

VSCode 插件开发 SDK

开发 VSCode 插件主要需要以下核心依赖:

json 复制代码
{
  "devDependencies": {
    "@types/vscode": "^1.74.0",
    "@typescript-eslint/eslint-plugin": "^5.45.0",
    "@typescript-eslint/parser": "^5.45.0",
    "eslint": "^8.28.0",
    "typescript": "^4.9.4"
  }
}

核心 SDK 说明:

  • @types/vscode:VSCode API 的 TypeScript 类型定义,这是最重要的依赖
  • typescript:TypeScript 编译器
  • eslint 相关包:代码质量检查工具

二、项目创建

方法一:使用官方脚手架(推荐)

  1. 安装 Yeoman 和 VSCode 扩展生成器:
bash 复制代码
npm install -g yo generator-code
  1. 创建新项目:
bash 复制代码
yo code
  1. 选择配置选项:
    • 选择 "New Extension (TypeScript)"
    • 输入扩展名称
    • 输入标识符
    • 输入描述
    • 选择是否初始化 git 仓库
    • 选择是否安装依赖

方法二:手动创建

  1. 创建项目目录并初始化:
bash 复制代码
mkdir my-vscode-extension
cd my-vscode-extension
npm init -y
  1. 安装必要依赖:
bash 复制代码
npm install --save-dev @types/vscode typescript eslint
  1. 创建基础文件结构:

    my-extension/
    ├── src/
    │ └── extension.ts
    ├── package.json
    ├── tsconfig.json
    └── README.md

三、TypeScript 开发核心概念

1. 扩展入口点

每个 VSCode 扩展都有两个核心函数:

typescript 复制代码
import * as vscode from 'vscode';

// 扩展激活时调用
export function activate(context: vscode.ExtensionContext) {
    console.log('扩展已激活');
    
    // 注册命令
    let disposable = vscode.commands.registerCommand('extension.helloWorld', () => {
        vscode.window.showInformationMessage('Hello World!');
    });
    
    context.subscriptions.push(disposable);
}

// 扩展停用时调用
export function deactivate() {
    console.log('扩展已停用');
}

2. VSCode API 核心模块

  • vscode.window:窗口相关操作(显示消息、输入框等)
  • vscode.workspace:工作区操作(文件、配置等)
  • vscode.commands:命令注册和执行
  • vscode.languages:语言服务相关
  • vscode.extensions:扩展管理

📚 API 详细文档

所有 VSCode API 的详细文档可以在以下位置找到:

建议在开发过程中经常查阅官方文档,里面包含了每个 API 的详细用法、参数说明和示例代码。

3. 常用开发模式

typescript 复制代码
// 获取当前活动编辑器
const editor = vscode.window.activeTextEditor;
if (editor) {
    const document = editor.document;
    const selection = editor.selection;
    
    // 获取选中的文本
    const selectedText = document.getText(selection);
    
    // 替换文本
    editor.edit(editBuilder => {
        editBuilder.replace(selection, '新文本');
    });
}

四、配置文件详解

package.json 关键配置

json 复制代码
{
  "name": "my-extension",
  "displayName": "My Extension",
  "description": "扩展描述",
  "version": "0.0.1",
  "engines": {
    "vscode": "^1.74.0"
  },
  "categories": ["Other"],
  "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 ./",
    "watch": "tsc -watch -p ./"
  }
}

tsconfig.json 配置

json 复制代码
{
  "compilerOptions": {
    "module": "commonjs",
    "target": "ES2020",
    "outDir": "out",
    "lib": ["ES2020"],
    "sourceMap": true,
    "rootDir": "src",
    "strict": true
  },
  "exclude": ["node_modules", ".vscode-test"]
}

五、调试与测试

本地调试

  1. 在 VSCode 中打开项目
  2. F5 启动调试
  3. 会打开一个新的 "Extension Development Host" 窗口
  4. 在新窗口中测试你的扩展功能

单元测试

typescript 复制代码
import * as assert from 'assert';
import * as vscode from 'vscode';

suite('Extension Test Suite', () => {
    test('Sample test', () => {
        assert.strictEqual(-1, [1, 2, 3].indexOf(5));
        assert.strictEqual(0, [1, 2, 3].indexOf(1));
    });
});

六、打包与发布

安装发布工具

bash 复制代码
npm install -g vsce

创建发布者账号

  1. 访问 Azure DevOps
  2. 创建个人访问令牌(PAT)
  3. VSCode Marketplace 创建发布者

发布流程

bash 复制代码
# 登录
vsce login <publisher-name>

# 打包
vsce package

# 发布
vsce publish

七、实战案例:VSCode Variable Formatter

项目介绍

VSCode Variable Formatter 是一个用于快速转换变量命名风格的扩展,支持以下转换:

  • camelCase(驼峰命名)
  • PascalCase(帕斯卡命名)
  • snake_case(下划线命名)
  • kebab-case(短横线命名)
  • SCREAMING_SNAKE_CASE(大写下划线命名)

核心实现思路

typescript 复制代码
// 命名转换核心逻辑
export class VariableFormatter {
    static toCamelCase(str: string): string {
        return str.replace(/[-_\s]+(\w)/g, (_, letter) => letter.toUpperCase())
                 .replace(/^[A-Z]/, letter => letter.toLowerCase());
    }
    
    static toPascalCase(str: string): string {
        return str.replace(/[-_\s]+(\w)/g, (_, letter) => letter.toUpperCase())
                 .replace(/^[a-z]/, letter => letter.toUpperCase());
    }
    
    static toSnakeCase(str: string): string {
        return str.replace(/([A-Z])/g, '_$1')
                 .replace(/[-\s]+/g, '_')
                 .toLowerCase()
                 .replace(/^_/, '');
    }
    
    static toKebabCase(str: string): string {
        return str.replace(/([A-Z])/g, '-$1')
                 .replace(/[_\s]+/g, '-')
                 .toLowerCase()
                 .replace(/^-/, '');
    }
}

使用方式

  1. 选择要转换的变量名
  2. 打开命令面板(Cmd+Shift+PCtrl+Shift+P
  3. 搜索 "Format Variable" 相关命令
  4. 选择目标命名风格
  5. 自动替换为转换结果

项目特色

  • 🚀 快速转换:一键转换多种命名风格
  • 🎯 智能识别:自动识别当前命名风格
  • 📝 批量处理:支持多选文本同时转换
  • 高性能:基于正则表达式的高效转换算法

源码地址

项目已开源,欢迎查看源码和贡献:
GitHub : https://github.com/zeawhy/vscode-variable-formatter

八、最佳实践与建议

1. 代码质量

  • 使用 TypeScript 严格模式
  • 配置 ESLint 和 Prettier
  • 编写单元测试
  • 使用 Git 进行版本控制

2. 用户体验

  • 提供清晰的命令名称
  • 添加快捷键支持
  • 实现撤销/重做功能
  • 提供配置选项

3. 性能优化

  • 避免阻塞主线程
  • 使用异步操作
  • 合理使用缓存
  • 优化正则表达式

4. 文档完善

  • 详细的 README
  • 功能演示 GIF
  • 更新日志 CHANGELOG
  • 用户反馈渠道

九、常见问题与解决方案

Q1: 扩展无法激活

解决方案 :检查 package.json 中的 activationEvents 配置是否正确。

Q2: TypeScript 编译错误

解决方案 :确保 @types/vscode 版本与 engines.vscode 版本兼容。

Q3: 发布失败

解决方案:检查 PAT 权限,确保包含 Marketplace 管理权限。

结语

VSCode 插件开发是一个既有趣又实用的技能,通过 TypeScript 的强类型支持,我们可以构建出功能强大且稳定的扩展。希望本文能帮助你快速入门 VSCode 插件开发,并创造出属于自己的优秀扩展。

如果你对 VSCode Variable Formatter 感兴趣,欢迎访问项目仓库,给个 Star 支持一下!

项目地址 : https://github.com/zeawhy/vscode-variable-formatter


Happy Coding! 🚀

相关推荐
golang学习记6 小时前
JetBrains IDE 推出新一代 UI主题,有点东西
ide·ui
HealthScience9 小时前
vscode默认使用typora打开md(Markdown)文件、vscode中打开Markdown怎么默认使用typora打开
ide·vscode·编辑器
冰淇淋@10 小时前
idea启动项目报错java: OutOfMemoryError: insufficient memory
java·ide·intellij-idea
techzhi10 小时前
this view is read-only (IntelliJ IDEA)
java·ide·intellij-idea
西部森林牧歌10 小时前
Arbess零基础学习 - 使用Arbess+GitLab实现Node.js项目自动化构建/主机部署
ci/cd·node.js·gitlab·arbess·tiklab devops
脑子不好的小菜鸟12 小时前
用vscode连接远端ubuntu无法git push,vscode无法连接centos
git·vscode·ubuntu·centos
小池先生12 小时前
idea配置代码注释模板
java·ide·intellij-idea
双河子思12 小时前
Visual Studio 编程工程设置
ide·windows·visual studio
それども13 小时前
2025 Vscode安装Python教程
ide·vscode·编辑器