VSCode 扩展清单

776 阅读8分钟

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


官网文档

字段

NameRequiredTypeDetails
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:prepublishvscode: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 linkpackage.json attribute
Issuesbugs:url
Repositoryrepository:url
Homepagehomepage
Licenselicense

为您的扩展设置一个 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 LanguagesSnippets,以便在市场上轻松发现和过滤。


提示:确保您的合并贡献使用相同的标识符。在上面的示例中,所有三个贡献都使用 “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 项部分中。

附录

都看到这里了,还不点个赞吗?
消化官方内容不易,希望对你有所帮助。
后续会持续更新相关的学习内容,并将最新的文档链接附到此处