VSCode插件开发(一)-最简单的一个插件
Visual Studio Code(VSCode)作为目前最受欢迎的代码编辑器之一,其强大的插件生态系统功不可没。本文将带你从零开始,创建一个简单的VSCode插件,并介绍完整的开发流程。最后我们会完成一个简单的可以在VSCode快速修改图片尺寸的插件并发布到Marketplace。
注意我是在Windows 11的WSL环境下进行开发的,所以一些命令可能会与Windows环境下不同。Windows下WSL开发环境配置
1. 环境搭建
1.1 安装必要工具
首先,确保你的电脑已安装以下工具:
-
1. Node.js:VSCode插件开发基于Node.js环境,建议安装LTS版本 # 下载并安装Node.js LTS版本# 访问 https://nodejs.org/ 下载对应操作系统的安装包 -
2. Yeoman和VS Code扩展生成器:用于快速创建插件项目模板 npm install -g yo generator-code -
3. VSCode:当然,你需要安装最新版本的VSCode编辑器
1.2 创建插件项目
打开终端,运行以下命令创建一个新的VSCode插件项目:
# 创建一个新的插件项目yo code
运行上述命令后,会出现一系列选项,你可以根据需要进行选择:
? What type of extension do you want to create? New Extension (TypeScript)? What's the name of your extension? 图片快修? What's the identifier of your extension? letsdoit-image? What's the description of your extension? 可以vscode中快速的对图片做些修改? Initialize a git repository? Yes? Bundle the source code with webpack? No? Which package manager to use? npm
1.3 项目结构解析
创建完成后,你会得到一个基本的项目结构,主要文件包括:
hello-world/├── .vscode/ # VSCode配置文件│ ├── launch.json # 调试配置│ ├── tasks.json # 任务配置│ └── extensions.json # 推荐扩展├── src/ # 源代码目录│ ├── extension.ts # 插件入口文件│ └── test/ # 测试文件├── package.json # 项目配置和依赖├── tsconfig.json # TypeScript配置├── README.md # 项目说明└── CHANGELOG.md # 更新日志
现在,我们只需要关心两个重要的文件:
-
1. src/extension.ts:这是插件的入口文件,包含了插件的生命周期钩子和命令注册。 -
2. package.json:项目配置文件,包含了插件的元数据和依赖。
2. 编写我们的第一个插件
2.1 配置命令和菜单
在 package.json 文件中,我们需要配置命令和菜单项:
{ ... "contributes": { "commands": [ { "command": "letsdoit-image.resizeImage", "title": "Resize Image" } ], "menus": { "explorer/context": [ { "command": "letsdoit-image.resizeImage", "group": "navigation", "when": "resourceExtname == .webp || resourceExtname == .jpg || resourceExtname == .jpeg || resourceExtname == .png" } ] } }, ...}
这里我们申明了一个命令 letsdoit-image.resizeImage,并将其添加到了资源管理器的上下文菜单中。当用户在资源管理器中右键点击图片文件时,会显示 Resize Image 选项。我们在 when 条件中指定了图片文件的扩展名,只有当用户在资源管理器中右键点击图片文件时,才会显示 Resize Image 选项。
注意:这个命令的ID
letsdoit-image.resizeImage必须是全局唯一的,不能与其他插件的命令ID重复。
2.2 注册并实现该命令
打开 src/extension.ts 文件,这是插件的入口文件,包含了插件的生命周期钩子,我们需要在 activate 函数中注册我们的命令 letsdoit-image.resizeImage。让我们修改代码,创建一个简单的命令,当用户在资源管理器中右键点击图片时,会出现Resize Image选项,点击后会提示用户输入图片的宽度,然后将调整后的图片存入一个新文件,并加上了-resized后缀。
const disposable = vscode.commands.registerCommand('letsdoit-image.resizeImage', async (uri) => { let selectedFile = uri; if (!selectedFile) { selectedFile = vscode.window.activeTextEditor?.document.uri; } if (!selectedFile) { vscode.window.showErrorMessage('Please select an image file.'); return; } const widthInput = await vscode.window.showInputBox({ prompt: 'Enter the width of the image (in pixels)', placeHolder: 'e.g. 800', validateInput: (value) => { if (!value) { return 'Please enter a width.'; } if (isNaN(Number(value))) { return 'Please enter a valid number.'; } return null; } }); if (widthInput) { const resizedImagePath = selectedFile.fsPath.replace(/\.(webp|jpg|jpeg|png)$/, '-resized.$1'); const image = await Jimp.read(selectedFile.fsPath); image.resize({ w: Number(widthInput) }); await image.write(resizedImagePath); } }); context.subscriptions.push(disposable);
注意:
registerCommand的第一个参数是命令ID,必须跟package.json中声明的命令ID一致。
这里我们用到了一个第三方库 Jimp,用于处理图片。你需要先安装它:
npm install jimp
然后在 extension.ts 文件中,我们需要引入 Jimp 库:
import * as Jimp from 'jimp';
2.3 调试插件
-
1. 在VSCode中打开项目文件夹 -
2. 按 F5或点击”运行 > 启动调试” -
3. 这将打开一个新的VSCode窗口(扩展开发主机) -
4. 在新窗口中,按 Ctrl+Shift+P(或Cmd+Shift+Pon macOS) 打开命令面板 -
5. 在资源管理器中右键点击图片文件,选择 Resize Image选项 -
6. 输入图片的宽度,例如 800 -
7. 插件会在当前目录下创建一个新文件,文件名加上了 -resized后缀,例如image-resized.jpg
3. 打包
3.1 安装打包工具
VSCode插件需要使用 vsce(Visual Studio Code Extension)工具进行打包:
npm install -g vsce
3.2 编译TypeScript代码
在打包之前,需要将TypeScript代码编译为JavaScript:
npm run compile
3.3 完善基本信息
在 package.json 文件中,确保填写了插件的基本信息,例如版本号、作者、许可证等:
{ ... "version": "0.0.1", "icon": "icon.png", "license": "MIT", "repository": { "type": "git", "url": "https://github.com/letsdoit-today/letsdoit-image.git" }, ...}
3.4 打包插件
运行以下命令将插件打包为 .vsix 文件:
vsce package
我们也可以在package.json的scripts中添加一个命令,用于打包插件:
{ ... "scripts": { "package": "vsce package" }, ...}
然后运行:
npm run package
成功后,你会在项目根目录下看到一个 .vsix 文件,例如 letsdoit-image-0.0.1.vsix。
3.5 本地安装测试
你可以在本地安装并测试打包好的插件:
-
1. 在VSCode中,按 Ctrl+Shift+P打开命令面板 -
2. 输入”Extensions: Install from VSIX” -
3. 选择你刚刚创建的 .vsix文件 -
4. 重启VSCode以加载插件
4. 发布到Marketplace
4.1 创建Visual Studio Marketplace账户
-
1. 访问 Visual Studio Marketplace -
2. 点击”Sign in”登录或创建新账户,可以用outlook或者hotmail账号登陆 -
3. 登录后,访问 发布者管理页面
4.2 创建发布者
如果你是第一次发布插件,需要创建一个发布者:
-
1. 在发布者管理页面,点击”Create Publisher” -
2. 填写发布者名称、显示名称和标识符 -
3. 记下你的发布者名称,后续会用到
4.3 创建Personal Access Token
-
1. 在发布者管理页面,点击”Personal Access Tokens” -
2. 点击”Create New Token” -
3. 输入Token名称(如”VSCode Publishing”) -
4. 选择所有账户(All accessible accounts) -
5. 选择权限范围(至少需要”Marketplace > Publish”) -
6. 复制生成的Token(注意保存,只显示一次)
4.4 登录并发布插件
-
1. 在终端中,运行以下命令登录:
vsce login <你的发布者名称>
-
2. 系统会提示输入Personal Access Token,粘贴上一步创建的Token -
3. 发布插件:
vsce publish
4.5 插件审核与发布
-
1. 提交后,插件会进入审核流程,通常需要几分钟到几小时 -
2. 审核通过后,插件将在Marketplace上可见 -
3. 你可以在发布者管理页面查看插件的状态和下载统计
4.6 更新插件
当你需要更新插件时:
-
1. 修改 package.json中的版本号 -
2. 重新编译和打包 -
3. 再次运行 vsce publish命令
总结
通过本文,你已经学会了如何从零开始创建一个简单的VSCode插件,包括环境搭建、代码编写、打包和发布到Marketplace的完整流程。下一篇文章将介绍如何创建一个更复杂的插件,用到Webview加React, Tailwindcss, Shadcn, Vite等技术栈构建一个用户友好的插件,实现图片快修的功能。
希望这篇文章能帮助你开启VSCode插件开发之旅!如果你有任何问题或建议,欢迎在评论区留言讨论。
夜雨聆风
