扩展清单
每个扩展根目录都要有 package.json。它同时是 npm 包描述和 VS Code 扩展清单,里面混着 scripts、devDependencies 这类 Node 字段,以及 publisher、activationEvents、contributes 这类编辑器字段。
身份
publisher.name 组成扩展的唯一 ID,例如 vscode-samples.helloworld-sample。市场、设置同步、vscode:// 链接里的 authority 都用这个 ID。
常见身份字段:
| 字段 | 作用 |
|---|---|
name | 扩展名,和 publisher 一起构成 ID |
displayName | 市场和扩展视图里给人看的名字 |
publisher | 发布者 |
version | 版本 |
description | 一句话说明 |
engines.vscode | 依赖的最低 VS Code API 版本,也决定 @types/vscode 该对齐哪一版 |
categories | 市场分类 |
extensionKind | 更想跑在界面侧还是工作区侧 |
入口
| 字段 | 作用 |
|---|---|
main | Node 扩展宿主的入口,桌面和远程宿主用它 |
browser | 浏览器 Web Worker 宿主的入口,vscode.dev 一类环境用它 |
activationEvents | 何时激活。1.74 之后很多贡献会隐式激活,数组可以是空的 |
contributes | 贡献点,全是静态 JSON |
两边都能跑时,两个入口都写。只写 browser 就是纯网页扩展。
和代码的分工
清单负责「有什么」:命令标题、菜单挂在哪、配置项形状、视图放在哪个容器。代码负责「怎么做」:registerCommand 的函数体、树的 getChildren、配置变更后的反应。
只写清单,命令会出现在界面上,但点下去没有实现。只写 registerCommand,命令能被代码调用,但命令面板里没有标题,用户也发现不了。两边的命令字符串必须是同一个。