扩展清单

package.json每个 Visual Studio Code 扩展都需要在扩展目录结构的根目录下有一个清单文件。

领域

姓名 必需的 类型 细节
name string 扩展名 - 应全部小写,不含空格。
该名称对于 Marketplace 必须是唯一的。
version string SemVer兼容版本。
publisher string 出版商名称
engines object 一个对象,至少包含与扩展兼容vscode的 VS Code 版本相匹配的密钥。不可能。例如:表示与最低 VS Code 版本兼容。*^0.10.50.10.5
license string 请参阅npm 的文档。如果您的扩展的根目录中有一个LICENSE文件,则 的值license应该是"SEE LICENSE IN <filename>".
displayName string Marketplace 中使用的扩展程序的显示名称。
显示名称对于 Marketplace 必须是唯一的。
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 帮助设置市场标题的格式以匹配您的图标。请参阅下面的详细信息。
preview boolean 将扩展设置为在 Marketplace 中标记为预览版。
main string 您的扩展的入口点。
browser string Web 扩展的入口点。
contributes object 描述扩展贡献的对象。
activationEvents array 此扩展的激活事件的数组。
badges array 显示在市场扩展页面侧边栏中的一系列已批准徽章。每个徽章都是一个包含 3 个属性的对象:url徽章的图像 URL、href用户单击徽章时将遵循的链接以及description
markdown string 控制 Marketplace 中使用的 Markdown 渲染引擎。github(默认)或standard.
qna marketplace(默认), string,false 控制市场中的问答链接。设置marketplace为启用默认 Marketplace 问答站点。设置为字符串以提供自定义问答站点的 URL。设置false为完全禁用问答。
sponsor object 指定用户可以赞助您的扩展的位置。这是一个具有单个属性的对象url,它链接到用户可以赞助您的扩展的页面。
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 与npmscripts完全相同,但具有额外的 VS Code 特定字段,例如vscode:prepublishvscode:uninstall
icon string 图标的路径至少为 128x128 像素(Retina 屏幕为 256x256)。
pricing string 扩展的定价信息。允许值:Free, Trial. 默认值:Free. 请参阅此处了解更多详细信息。
capabilities object 描述扩展在有限工作空间中的功能的对象:untrustedWorkspaces, virtualWorkspaces.

另请检查npm 的package.json参考

例子

这是一个完整的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"
  },
  "pricing": "Free",
  "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 @vscode/vsce确保您拥有它。

在您的扩展程序的根文件夹中有一个README.mdMarkdown 文件,我们将把内容包含在扩展程序详细信息的正文中(在 Marketplace 上)。您可以在 中提供相对路径图像链接README.md

这里有一些例子:

  1. 字数
  2. 医学博士工具

提供良好的显示名称和描述。这对于市场和产品展示非常重要。这些字符串也用于 VS Code 中的文本搜索,并且拥有相关的关键字会有很大帮助。

    "displayName": "Word Count",
    "description": "Markdown Word Count Example - reports out the number of words in a Markdown file.",

图标和对比鲜明的横幅颜色在市场页面标题上看起来很棒。该theme属性指的是横幅中使用的字体 -darklight

{
  "icon": "images/icon.png",
  "galleryBanner": {
    "color": "#C80000",
    "theme": "dark"
  }
}

您可以设置几个可选链接(bugshomepagerepository),这些链接显示在市场的资源部分下。

{
  "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"
  }
}
市场资源链接 package.json 属性
Issues bugs:url
Repository repository:url
Homepage homepage
License license

category为您的分机设置一个。同一扩展程序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保留用于显示语言扩展(例如本地化的保加利亚语)。

{
  "categories": ["Linters", "Programming Languages", "Other"]
}

认可徽章

出于安全考虑,我们只允许来自可信服务的徽章。

我们允许来自以下 URL 前缀的徽章:

  • api.bintray.com
  • api.travis-ci.com
  • api.travis-ci.org
  • 应用程序.fossa.io
  • 徽章.buildkite.com
  • 徽章.狂怒.io
  • 徽章.waffle.io
  • badgen.net
  • 徽章.frapsoft.com
  • 徽章.gitter.im
  • 徽章.greenkeeper.io
  • CDN.travis-ci.com
  • cdn.travis-ci.org
  • ci.appveyor.com
  • 圈子网
  • cla.opensource.microsoft.com
  • 科达西网站
  • codeclimate.com
  • Codecov.io
  • 工作服.io
  • 大卫-DM.org
  • 深度扫描.io
  • dev.azure.com
  • 文档.rs
  • flat.badgen.net
  • gemnasium.com
  • github.com(仅来自工作流程)
  • gitlab.com
  • godoc.org
  • goreportcard.com
  • img.shields.io
  • isitmaintained.com
  • market.visualstudio.com
  • 节点安全.io
  • 开放集体网站
  • snyk.io
  • travis-ci.com
  • travis-ci.org
  • 视觉工作室网站
  • vsmarketplacebadges.dev
  • www.versioneye.com

注意:将 vsmarketplacebadge.apphb.com 徽章替换为 vsmarketplacebadges.dev 徽章。

如果您想使用其他徽章,请打开 GitHub问题,我们很乐意查看。

合并扩展贡献

yo code生成器可让您轻松打包 TextMate 主题、着色器和片段并创建新的扩展。当生成器运行时,它会为每个选项创建一个完整的独立扩展包。然而,拥有一个结合了多个贡献的单一扩展通常会更方便。例如,如果您要添加对新语言的支持,您希望向用户提供带有着色的语言定义以及代码片段,甚至可能还提供调试支持。

要合并扩展贡献,请编辑现有扩展清单package.json并添加新贡献和关联文件。

下面是一个扩展清单,其中包括 LaTex 语言定义(语言标识符和文件扩展名)、着色 ( grammars) 和片段。

{
  "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 文件时将处于活动状态。

扩展包

您可以将单独的扩展捆绑在扩展包中。扩展包是一组将安装在一起的扩展。这样可以轻松地与其他用户共享您喜欢的扩展,或者为 PHP 开发等特定场景创建一组扩展,以帮助 PHP 开发人员快速开始使用 VS Code。

扩展包使用文件extensionPack内的属性捆绑其他扩展package.json

例如,下面是一个 PHP 扩展包,其中包含调试器和语言服务:

{
  "extensionPack": ["xdebug.php-debug", "zobo.php-intellisense"]
}

安装扩展包时,VS Code 现在还将安装其扩展依赖项。

扩展包应分类在Extension PacksMarketplace 类别中:

{
  "categories": ["Extension Packs"]
}

要创建扩展包,您可以使用yo codeYeoman 生成器并选择“新建扩展包”选项。有一个选项可以使用您当前安装在 VS Code 实例中的一组扩展来为包做种。通过这种方式,您可以轻松地使用您喜欢的扩展创建扩展包,将其发布到 Marketplace,并与其他人共享。

扩展包不应该与其捆绑的扩展有任何功能依赖性,并且捆绑的扩展应该可以独立于扩展包进行管理。如果一个扩展依赖于另一个扩展,则应使用该extensionDependencies属性声明该依赖关系。

扩展卸载挂钩

如果您的扩展在从 VS Code 卸载时需要进行一些清理,您可以将脚本注册到扩展的 package.json 部分下的node卸载挂钩。vscode:uninstallscripts

{
  "scripts": {
    "vscode:uninstall": "node ./out/src/lifecycle"
  }
}

当扩展从 VS Code 中完全卸载时,即卸载扩展后重新启动(关闭并启动)VS Code 时,将执行此脚本。

注意:仅支持 Node.js 脚本。

有用的节点模块

npmjs 上有多个 Node.js 模块可帮助编写 VS Code 扩展。您可以将它们包含在您的扩展dependencies部分中。

下一步

要了解有关 VS Code 扩展性模型的更多信息,请尝试以下主题: