每个 Visual Studio Code 扩展都需要一个位于扩展目录结构根目录的清单文件 package.json。
字段
| Name | Required | Type | Details |
|---|---|---|---|
name |
YES | string |
扩展的名 - 应该全部小写且没有空格。 |
version |
YES | string |
SemVer 兼容版本。 |
engines |
YES | object |
至少包含与扩展兼容的 VS Code 版本匹配的 vscode 键的对象。不可能是 *。例如:^0.10.5 表示与最低 VS Code 版本 0.10.5 的兼容性。 |
publisher |
YES | string |
出版商名称。 |
license |
string |
请参阅 npm 的文档。如果您在扩展的根目录中确实有一个 LICENSE 文件,license的值应该是"SEE LICENSE IN <filename>"。 |
|
displayName |
string |
市场中使用的扩展程序的显示名称。 | |
description |
string |
简短描述您的扩展是什么和做什么。 | |
categories |
string[] |
您要用于扩展的类别。允许值:[Programming Languages, Snippets, Linters, Themes, Debuggers, Formatters, Keymaps, SCM Providers, Other, Extension Packs, Language Packs, Data Science, Machine Learning, Visualization, Notebooks, Education, Testing] |
|
keywords |
array |
一组关键字,可以更轻松地找到扩展程序。这些包含在市场上的其他扩展标签中。此列表目前仅限于 5 个关键字。 | |
galleryBanner |
object |
帮助格式化 Marketplace 标题以匹配您的图标。请参阅下面的详细信息。 | |
preview |
boolean |
将扩展设置为在市场中标记为预览。 | |
main |
string |
扩展程序的入口文件。 | |
browser |
string |
Web 扩展的入口文件。 | |
contributes |
object |
描述扩展贡献的对象。 | |
activationEvents |
array |
此扩展的激活事件数组。 | |
badges |
array |
显示在 Marketplace 扩展页面侧边栏中的已批准徽章数组。 | |
markdown |
string |
控制 Marketplace 中使用的 Markdown 渲染引擎。github(默认)或标准。 | |
qna |
marketplace (default), string, false |
控制市场中的Q & A 链接。github(默认)或标准。设置为 marketplace 以启用默认市场问答网站。设置为 string 以提供自定义问答网站的 URL。设置为 false 以完全禁用问答。 |
|
dependencies |
object |
您的扩展需要的任何运行时 Node.js 依赖项。和 npm 的 dependencies完全一样。 |
|
devDependencies |
object |
您的扩展需要的任何开发 Node.js 依赖项。和 npm 的 devDependencies完全一样。 |
|
extensionPack |
array |
包含与此扩展捆绑的扩展 ID 的数组。这些其他扩展将在安装主扩展时安装。 扩展的 id 总是 ${publisher}.${name}。例如:vscode.csharp。 |
|
extensionDependencies |
array |
具有此扩展所依赖的扩展 ID 的数组。这些其他扩展将在安装主扩展时安装。扩展的 id 总是 ${publisher}.${name}。例如:vscode.csharp。 |
|
extensionKind |
array |
指示扩展应在远程配置中运行的位置的数组。值是 ui(在本地运行)、workspace(在远程机器上运行)或两者,按顺序设置首选项。例如:[ui, workspace] 表示扩展可以在任一位置运行,但更喜欢在本地计算机上运行。有关更多详细信息,请参见此处。 |
|
scripts |
object |
与 npm 的 scripts 完全相同,但具有额外的 VS Code 特定字段,例如 vscode:prepublish 或 vscode:uninstall。 |
|
icon |
string |
至少 128x128 像素(Retina 屏幕为 256x256)图标的路径。 |
还可以检查 npm 的 package.json 参考
# Here is a complete package.json
{
"name": "wordcount",
"displayName": "Word Count",
"version": "0.1.0",
"publisher": "ms-vscode",
"description": "Markdown Word Count Example - reports out the number of words in a Markdown file.",
"author": {
"name": "sean"
},
"categories": ["Other"],
"icon": "images/icon.png",
"galleryBanner": {
"color": "#C80000",
"theme": "dark"
},
"activationEvents": ["onLanguage:markdown"],
"engines": {
"vscode": "^1.0.0"
},
"main": "./out/extension",
"scripts": {
"vscode:prepublish": "node ./node_modules/vscode/bin/compile",
"compile": "node ./node_modules/vscode/bin/compile -watch -p ./"
},
"devDependencies": {
"@types/vscode": "^0.10.x",
"typescript": "^1.6.2"
},
"license": "SEE LICENSE IN LICENSE.txt",
"bugs": {
"url": "https://github.com/microsoft/vscode-wordcount/issues",
"email": "sean@contoso.com"
},
"repository": {
"type": "git",
"url": "https://github.com/microsoft/vscode-wordcount.git"
},
"homepage": "https://github.com/microsoft/vscode-wordcount/blob/main/README.md"
}
市场展示技巧
这里有一些提示和建议,可以让你的扩展在 VS Code Marketplace 上展示时看起来很棒。
始终使用最新的 vsce 所以 npm install -g vsce 以确保您拥有它。
在扩展程序的根文件夹中有一个 README.md Markdown 文件,我们会将内容包含在扩展程序详细信息的正文中(在市场上)。您可以在 README.md 中提供相对路径图像链接。
这里有一些例子:
提供一个好的显示名称和描述。这对于市场和产品展示很重要。这些字符串也用于 VS Code 中的文本搜索,并且拥有相关的关键字会有很大帮助。
"displayName": "Word Count",
"description": "Markdown Word Count Example - reports out the number of words in a Markdown file.",
图标和对比鲜明的横幅颜色在 Marketplace 页面标题上看起来很棒。theme 属性是指要在横幅中使用的字体 - 深色或浅色。
{
"icon": "images/icon.png",
"galleryBanner": {
"color": "#C80000",
"theme": "dark"
}
}
您可以设置几个可选链接(bugs, homepage, repository),这些链接显示在 Marketplace 的 Resources 部分下。
{
"license": "SEE LICENSE IN LICENSE.txt",
"homepage": "https://github.com/microsoft/vscode-wordcount/blob/main/README.md",
"bugs": {
"url": "https://github.com/microsoft/vscode-wordcount/issues",
"email": "sean@contoso.com"
},
"repository": {
"type": "git",
"url": "https://github.com/microsoft/vscode-wordcount.git"
}
}
| Marketplace Resources link | package.json attribute |
|---|---|
| Issues | bugs:url |
| Repository | repository:url |
| Homepage | homepage |
| License | license |
为您的扩展设置一个 category 类别。同一类别的扩展在市场上分组在一起,从而改进了过滤和发现。
注意:仅使用对您的扩展有意义的值。允许的值为
[Programming Languages, Snippets, Linters, Themes, Debuggers, Formatters, Keymaps, SCM Providers, Other, Extension Packs, Language Packs, Data Science, Machine Learning, Visualization, Notebooks, Education, Testing]。将Programming Languages用于一般语言功能,如语法突出显示和代码完成。Language Packs类别保留用于显示语言扩展(例如,本地化的保加利亚语)。
批准的徽章
出于安全考虑,我们只允许来自受信任服务的徽章。我们允许来自以下 URL 前缀的徽章:
- api.bintray.com
- api.travis-ci.com
- api.travis-ci.org
- app.fossa.io
- badge.buildkite.com
- badge.fury.io
- badge.waffle.io
- badgen.net
- badges.frapsoft.com
- badges.gitter.im
- badges.greenkeeper.io
- cdn.travis-ci.com
- cdn.travis-ci.org
- ci.appveyor.com
- circleci.com
- cla.opensource.microsoft.com
- codacy.com
- codeclimate.com
- codecov.io
- coveralls.io
- david-dm.org
- deepscan.io
- dev.azure.com
- docs.rs
- flat.badgen.net
- gemnasium.com
- githost.io
- github.com (from Workflows only)
- gitlab.com
- godoc.org
- goreportcard.com
- img.shields.io
- isitmaintained.com
- marketplace.visualstudio.com
- nodesecurity.io
- opencollective.com
- snyk.io
- travis-ci.com
- travis-ci.org
- visualstudio.com
- vsmarketplacebadge.apphb.com
- www.bithound.io
- www.versioneye.com
如果您有其他想要使用的徽章,请打开 GitHub 问题。
结合扩展贡献
yo code 生成器让您轻松打包 TextMate 主题,着色器和代码片段并创建新的扩展。当生成器运行时,它会为每个选项创建一个完整的独立扩展包。但是,拥有一个组合多个贡献的单个扩展通常更方便。例如,如果您要添加对一种新语言的支持,您希望为用户提供带有着色的语言定义以及片段,甚至可能是调试支持。
要合并扩展贡献,请编辑现有扩展清单 package.json 并添加新贡献和关联文件。
下面是一个扩展清单,其中包括 LaTex 语言定义(语言标识符和文件扩展名)、着色(语法)和片段。
{
"name": "language-latex",
"description": "LaTex Language Support",
"version": "0.0.1",
"publisher": "someone",
"engines": {
"vscode": "0.10.x"
},
"categories": ["Programming Languages", "Snippets"],
"contributes": {
"languages": [
{
"id": "latex",
"aliases": ["LaTeX", "latex"],
"extensions": [".tex"]
}
],
"grammars": [
{
"language": "latex",
"scopeName": "text.tex.latex",
"path": "./syntaxes/latex.tmLanguage.json"
}
],
"snippets": [
{
"language": "latex",
"path": "./snippets/snippets.json"
}
]
}
}
请注意,扩展清单 categories 属性现在包括 Programming Languages 和 Snippets,以便在市场上轻松发现和过滤。
提示:确保您的合并贡献使用相同的标识符。在上面的示例中,所有三个贡献都使用 “latex” 作为语言标识符。这让 VS Code 知道着色器(
grammars)和片段用于 LaTeX 语言,并且在编辑 LaTeX 文件时将处于活动状态。
Extension Packs
您可以在扩展包中将单独的扩展捆绑在一起。扩展包是一组将一起安装的扩展。这可以轻松与其他用户共享您最喜欢的扩展,或为特定场景(如 PHP 开发)创建一组扩展,以帮助 PHP 开发人员快速开始使用 VS Code。
扩展包使用 package.json 文件中的 extensionPack 属性捆绑其他扩展。
例如,这是一个 PHP 扩展包,其中包括调试器、语言服务和格式化程序:
{
"extensionPack": [
"felixfbecker.php-debug",
"felixfbecker.php-intellisense",
"Kasik96.format-php"
]
}
安装扩展包时,VS Code 现在也将安装其扩展依赖项。
扩展包应归类在扩展包市场类别中:
{
"categories": ["Extension Packs"]
}
要创建扩展包,您可以使用 yo code Yeoman 生成器并选择 New Extension Pack 选项。有一个选项可以使用您当前安装在 VS Code 实例中的一组扩展来为包播种。通过这种方式,您可以轻松地使用您喜欢的扩展创建一个扩展包,将其发布到 Marketplace,并与他人共享。
扩展包不应与其捆绑的扩展有任何功能依赖关系,并且捆绑的扩展应该可以独立于包进行管理。如果一个扩展依赖于另一个扩展,则应该使用 extensionDependencies 属性声明该依赖。
Extension uninstall hook
如果您的扩展在从 VS Code 卸载时需要进行一些清理,您可以在扩展的 package.json 中的 scripts 部分下将 node 脚本注册到卸载挂钩 vscode:uninstall。
{
"scripts": {
"vscode:uninstall": "node ./out/src/lifecycle"
}
}
当从 VS Code 完全卸载扩展程序时,即在卸载扩展程序后重新启动(关闭和启动)VS Code 时,将执行此脚本。
注意:仅支持 Node.js 脚本。
Useful Node modules
npmjs 上有几个 Node.js 模块可用于帮助编写 VS Code 扩展。您可以将这些包含在扩展的 dependencies 项部分中。
- vscode-nls - 支持外部化和本地化。
- vscode-uri - VS Code 及其扩展使用的 URI 实现。
- jsonc-parser - 一个扫描器和容错解析器,用于处理带有或不带有注释的 JSON。
- request-light - 具有代理支持的轻量级 Node.js 请求库。
- vscode-extension-telemetry - VS Code 扩展的一致遥测报告。
- vscode-languageclient - 轻松集成遵循语言服务器协议的语言服务器。
附录
都看到这里了,还不点个赞吗?
消化官方内容不易,希望对你有所帮助。
后续会持续更新相关的学习内容,并将最新的文档链接附到此处。