跳到主要内容

扩展清单

每个扩展根目录都要有 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更想跑在界面侧还是工作区侧

入口​

字段作用
mainNode 扩展宿主的入口,桌面和远程宿主用它
browser浏览器 Web Worker 宿主的入口,vscode.dev 一类环境用它
activationEvents何时激活。1.74 之后很多贡献会隐式激活,数组可以是空的
contributes贡献点,全是静态 JSON

两边都能跑时,两个入口都写。只写 browser 就是纯网页扩展。

和代码的分工​

清单负责「有什么」:命令标题、菜单挂在哪、配置项形状、视图放在哪个容器。代码负责「怎么做」:registerCommand 的函数体、树的 getChildren、配置变更后的反应。

只写清单,命令会出现在界面上,但点下去没有实现。只写 registerCommand,命令能被代码调用,但命令面板里没有标题,用户也发现不了。两边的命令字符串必须是同一个。

参考​