关于 vscode-extension-builder-lawvable
用于从头构建 VS Code 扩展或将现有 Web 应用转为扩展的技能。它提供模板及有关命令、Webview、树视图、自定义编辑器、构建、打包和 AI Agent 通信的指南。
主要功能
- 01提供常见扩展类型的模板
- 02指导构建 Webview 和树视图
- 03将 Web 应用转换为扩展
- 04配置 TypeScript、esbuild 和 Vite 构建
- 05将扩展打包为 VSIX 文件
- 06通过文件 IPC 连接 AI Agent
适用场景
- 01创建 VS Code 命令或操作
- 02构建 React Webview 或侧边栏树视图
- 03将现有 Web 应用改造为 VS Code 扩展
- 04添加与 AI Agent 的文件通信
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ lawve-ai/ awesome-legal-skills --skill vscode-extension-builder-lawvable安装后在 Claude Code 中输入/vscode-extension-builder-lawvable确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSE.txtassets/basic-command/esbuild.jspackage.jsontsconfig.jsonassets/basic-command/src/extension.tsassets/custom-editor/esbuild.jspackage.jsontsconfig.jsonassets/custom-editor/src/editorProvider.tsextension.tsassets/file-bridge/esbuild.jspackage.jsontsconfig.jsonassets/file-bridge/src/extension.tsfileBridge.tsassets/tree-view/esbuild.jspackage.jsontsconfig.jsonassets/tree-view/src/extension.tstreeProvider.tsassets/webview-react/esbuild.jspackage.jsontsconfig.jsonassets/webview-react/src/extension.tsassets/webview-react/src/webview/App.tsxindex.htmlindex.tsxstyles.csstsconfig.jsonvite.config.ts详细介绍
VS Code 扩展
从头开始构建 VS Code 扩展,或将现有 Web 应用转换为可移植、可分享的扩展。
架构
VS Code 扩展运行在两种上下文中:
- 扩展宿主(Node.js) — 后端逻辑、文件访问、VS Code API
- Webview(浏览器沙箱) — 使用 HTML/CSS/JS 构建的自定义 UI(React、Vue、原生)
构建技术栈:TypeScript + esbuild(扩展)+ Vite(Webview)
快速开始
- 根据需求从
assets/中选择模板(参见下方决策树) - 将模板复制到项目目录
- 更新
package.json:name、displayName、publisher、description - 运行
npm install,然后运行npm run build - 在 VS Code 中按 F5,启动扩展开发宿主
模板决策树
| 需求 | 模板 |
|---|---|
| 简单命令/操作 | assets/basic-command/ |
| 自定义 UI 面板(React) | assets/webview-react/ |
| 侧边栏文件树 | assets/tree-view/ |
| 自定义文件编辑器 | assets/custom-editor/ |
| AI Agent 集成 | assets/file-bridge/ |
扩展类型
命令
注册可通过命令面板、键盘快捷键或菜单触发的操作。
vscode.commands.registerCommand('myExt.doSomething', () => {
vscode.window.showInformationMessage('Done!');
});
常用 API 请参阅 references/api-reference.md。
Webview
在面板或侧边栏中显示完整的 HTML/CSS/JS UI。复杂界面可使用 React。
const panel = vscode.window.createWebviewPanel(
'myView', 'My Panel', vscode.ViewColumn.One,
{ enableScripts: true }
);
panel.webview.html = getWebviewContent();
React 设置、消息传递和 CSP 请参阅 references/webview-patterns.md。
树视图
在侧边栏中显示分层数据(文件浏览器、大纲、列表)。
vscode.window.registerTreeDataProvider('myTreeView', new MyTreeProvider());
TreeDataProvider 模式请参阅 references/tree-view-patterns.md。
自定义编辑器
为特定文件类型替换默认编辑器。
vscode.window.registerCustomEditorProvider('myExt.myEditor', new MyEditorProvider());
文档同步和撤销/重做请参阅 references/custom-editor-patterns.md。
转换现有应用
将 JS/React/Vue 应用转换为扩展:
- 评估 — 应用的功能是什么?需要哪些 VS Code 特性?
- 映射 API — 将 Web API 替换为对应的 VS Code API
- 重构 — 将 UI 移入 Webview,将逻辑移入扩展宿主
- 连接 — 配置 postMessage 通信
| Web API | VS Code 对应项 |
|---|---|
localStorage | context.globalState / context.workspaceState |
fetch() | vscode.workspace.fs,或保留 fetch 用于外部 API |
| 路由器 | 多个 Webview 面板或侧边栏视图 |
alert() | vscode.window.showInformationMessage() |
prompt() | vscode.window.showInputBox() |
confirm() | 带选项的 vscode.window.showWarningMessage() |
详细的分步流程请参阅 references/conversion-guide.md。
构建系统
扩展代码 — 使用 esbuild(快速、简单):
// esbuild.js
esbuild.build({
entryPoints: ['src/extension.ts'],
bundle: true,
outfile: 'dist/extension.js',
external: ['vscode'],
format: 'cjs',
platform: 'node',
});
Webview 代码 — 使用 Vite(HMR、支持 React):
// vite.config.ts
export default defineConfig({
build: {
outDir: '../dist/webview',
rollupOptions: { output: { entryFileNames: '[name].js' } }
}
});
完整配置请参阅 references/build-config.md。
package.json 清单
必需字段:
{
"name": "my-extension",
"displayName": "My Extension",
"publisher": "your-publisher-id",
"version": "0.0.1",
"engines": { "vscode": "^1.85.0" },
"main": "./dist/extension.js",
"activationEvents": [],
"contributes": {
"commands": [{ "command": "myExt.hello", "title": "Hello" }]
}
}
contributes 部分用于定义命令、菜单、视图、设置、键绑定等。
所有贡献点类型请参阅 references/contribution-points.md。
IPC 模式
扩展 ↔ Webview
使用 postMessage 进行双向通信:
// Extension → Webview
panel.webview.postMessage({ type: 'update', data: {...} });
// Webview → Extension
panel.webview.onDidReceiveMessage(msg => {
if (msg.type === 'save') { /* handle */ }
});
扩展 ↔ 外部工具(AI Agent)
使用基于文件的 IPC 与 Claude Code 或其他 Agent 通信:
// Watch for command files
fs.watch(commandDir, (event, filename) => {
if (filename.endsWith('.json')) {
const command = JSON.parse(fs.readFileSync(path.join(commandDir, filename)));
processCommand(command);
}
});
文件桥接模式请参阅 references/ai-integration.md。
打包与分发
打包为 .vsix
npm install -g @vscode/vsce
vsce package
这会创建 my-extension-0.0.1.vsix。
.vscodeignore
排除不必要的文件:
.vscode/**
node_modules/**
src/**
*.ts
tsconfig.json
esbuild.js
vite.config.ts
分发选项
- 直接分享 — 发送 .vsix 文件,通过
code --install-extension file.vsix安装 - VS Marketplace — 使用
vsce publish发布(需要 Microsoft 账户) - Open VSX — 面向开源扩展的替代注册表
特定平台的构建
对于包含原生依赖项的扩展:
vsce package --target win32-x64
vsce package --target darwin-arm64
vsce package --target linux-x64
参考文件
| 文件 | 阅读时机 |
|---|---|
| api-reference.md | 实现扩展功能 |
| contribution-points.md | 配置 package.json 的 contributes |
| webview-patterns.md | 构建 React Webview |
| tree-view-patterns.md | 实现树视图 |
| custom-editor-patterns.md | 构建自定义文件编辑器 |
| build-config.md | 配置 esbuild/Vite |
| conversion-guide.md | 转换 Web 应用 |
| ai-integration.md | 与 AI Agent 集成 |
资源模板
| 模板 | 描述 |
|---|---|
| basic-command/ | 仅包含一个命令的最小扩展 |
| webview-react/ | 带消息传递功能的 React Webview 面板 |
| tree-view/ | 带提供程序的侧边栏树视图 |
| custom-editor/ | 用于特定文件类型的自定义编辑器 |
| file-bridge/ | 面向 AI Agent 的基于文件的 IPC |