現已釋出!閱讀關於 11 月新增功能和修復的內容。

擴充套件清單

每個 Visual Studio Code 擴充套件都需要一個名為 package.json 的清單檔案,位於擴充套件目錄結構的根目錄。

欄位

名稱 必填 型別 詳細資訊
name 字串 擴充套件的名稱 - 應全部小寫且不含空格。
該名稱在 Marketplace 中必須是唯一的。
version 字串 相容 SemVer 的版本。
publisher 字串 釋出者識別符號
engines 物件 一個物件,至少包含 vscode 鍵,該鍵與擴充套件 相容 的 VS Code 版本匹配。不能是 *。例如:^0.10.5 表示與最低 VS Code 版本 0.10.5 相容。
license 字串 請參閱 npm 文件。如果擴充套件根目錄中有一個 LICENSE 檔案,則 license 的值應為 "SEE LICENSE IN <filename>"
displayName 字串 在 Marketplace 中使用的擴充套件的顯示名稱。
顯示名稱在 Marketplace 中必須是唯一的。
描述 字串 對您的擴充套件是什麼以及它做什麼的一個簡短描述。
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 陣列 一個 **關鍵字** 陣列,便於查詢擴充套件。這些關鍵字與 Marketplace 上的其他擴充套件 **標籤** 一起顯示。此列表目前限制為 30 個關鍵字。
galleryBanner 物件 有助於格式化 Marketplace 標頭以匹配您的圖示。有關詳細資訊,請參閱下方。
preview 布林值 將擴充套件設定為在 Marketplace 中標記為預覽版。
main 字串 擴充套件的入口點。
browser 字串 您的 Web 擴充套件 的入口點。
contributes 物件 一個描述擴充套件 貢獻 的物件。
activationEvents 陣列 此擴充套件的 啟用事件 陣列。
badges 陣列 將在 Marketplace 擴充套件頁面的側邊欄中顯示的已 **批准** 的徽章陣列。每個徽章是一個包含 3 個屬性的物件:url(徽章的圖片 URL)、href(使用者點選徽章時將跟隨的連結)和 description
Markdown 字串 控制在 Marketplace 中使用的 Markdown 渲染引擎。可以是 github(預設)或 standard
qna marketplace(預設)、stringfalse 控制 Marketplace 中的 **問答** 連結。設定為 marketplace 以啟用預設的 Marketplace 問答站點。設定為字串以提供自定義問答站點的 URL。設定為 false 以完全停用問答。
sponsor 物件 指定使用者可以贊助您的擴充套件的位置。這是一個只有一個屬性 url 的物件,該屬性連結到使用者可以贊助您的擴充套件的頁面。
dependencies 物件 您的擴充套件所需的任何執行時 Node.js 依賴項。與 npm 的 dependencies 完全相同。
devDependencies 物件 您的擴充套件所需的任何開發 Node.js 依賴項。與 npm 的 devDependencies 完全相同。
extensionPack 陣列 一個包含可以一起安裝的擴充套件 ID 的陣列。擴充套件的 ID 始終是 ${publisher}.${name}。例如:vscode.csharp
extensionDependencies 陣列 一個包含此擴充套件所依賴的擴充套件 ID 的陣列。擴充套件的 ID 始終是 ${publisher}.${name}。例如:vscode.csharp
extensionKind 陣列 一個數組,指示擴充套件在遠端配置中應在何處執行。值為 ui(在本地執行)、workspace(在遠端計算機上執行)或兩者兼有,順序決定了首選項。例如:[ui, workspace] 表示擴充套件可以在任一位置執行,但更傾向於在本地機器上執行。有關詳細資訊,請參閱 此處
scripts 物件 npm 的 scripts 完全相同,但包含額外的 VS Code 特定欄位,例如 vscode:prepublishvscode:uninstall
icon 字串 圖示的路徑,至少為 128x128 畫素(Retina 螢幕為 256x256 畫素)。
pricing 字串 擴充套件的定價資訊。允許的值:FreeTrial。預設值:Free。有關詳細資訊,請參閱 此處
capabilities 物件 一個描述擴充套件在有限工作區中的功能的***capability***的物件:untrustedWorkspacesvirtualWorkspaces

另請參閱 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"
}

Marketplace 展示技巧

以下是一些技巧和建議,可讓您的擴充套件在 VS Code Marketplace 上看起來更出色。

始終使用最新的 vsce,請執行 npm install -g @vscode/vsce 來確保您已安裝。

在擴充套件的根資料夾中放置一個 README.md Markdown 檔案,我們將在擴充套件詳細資訊(在 Marketplace 上)的正文中包含其內容。您可以在 README.md 中提供相對路徑的圖片連結。

以下是一些示例

  1. 字數統計
  2. MD Tools

提供良好的顯示名稱和描述。這對於 Marketplace 和產品顯示很重要。這些字串也用於 VS Code 中的文字搜尋,擁有相關的關鍵字將非常有幫助。

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

圖示和對比鮮明的橫幅顏色在 Marketplace 頁面標題上看起來很棒。theme 屬性是指橫幅中使用的字型 - darklight

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

您可以設定幾個可選連結(bugshomepagerepository),這些連結顯示在 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 資源連結 package.json 屬性
問題 bugs:url
儲存庫 repository:url
主頁 homepage
許可證 license

為您的擴充套件設定一個 category。同一 category 下的擴充套件在 Marketplace 上會分組顯示,從而改善過濾和發現。

注意: 僅使用對您的擴充套件有意義的值。允許的值為 [Programming Languages, Snippets, Linters, Themes, Debuggers, Formatters, Keymaps, SCM Providers, Other, Extension Packs, Language Packs, Data Science, Machine Learning, Visualization, Notebooks, Education, Testing]。對於常規語言功能(如語法高亮和程式碼補全),請使用 Programming LanguagesLanguage Packs 類別保留給顯示語言擴充套件(例如,本地化的保加利亞語)。

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

已批准的徽章

出於安全考慮,我們僅允許來自受信任服務的徽章。

我們允許來自以下 URL 字首的徽章

  • api.travis-ci.com
  • app.fossa.io
  • badge.buildkite.com
  • badge.fury.io
  • badgen.net
  • badges.frapsoft.com
  • badges.gitter.im
  • cdn.travis-ci.com
  • 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
  • github.com (僅來自 Workflows)
  • gitlab.com
  • godoc.org
  • goreportcard.com
  • img.shields.io
  • isitmaintained.com
  • marketplace.visualstudio.com
  • nodesecurity.io
  • opencollective.com
  • snyk.io
  • travis-ci.com
  • visualstudio.com
  • vsmarketplacebadges.dev

注意:請將 vsmarketplacebadge.apphb.com 徽章替換為 vsmarketplacebadges.dev 徽章。

如果您想使用其他徽章,請在 GitHub 上 提出 issue,我們將樂於檢視。

合併擴充套件貢獻

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 LanguagesSnippets,以便在 Marketplace 上輕鬆發現和過濾。

提示: 確保您合併的貢獻使用相同的識別符號。在上面的示例中,所有三個貢獻都使用“latex”作為語言識別符號。這會讓 VS Code 知道著色器(grammars)和程式碼片段是針對 LaTeX 語言的,並且將在編輯 LaTeX 檔案時啟用。

擴充套件包

您可以將單獨的擴充套件捆綁在 **Extension Packs** 中。擴充套件包是一組將一起安裝的擴充套件。這使得您可以輕鬆地與他人共享您喜歡的擴充套件,或為特定場景(如 PHP 開發)建立一組擴充套件,幫助 PHP 開發人員快速開始使用 VS Code。

擴充套件包透過 package.json 檔案中的 extensionPack 屬性來捆綁其他擴充套件。

例如,這是一個包含偵錯程式和語言服務的 PHP 擴充套件包:

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

安裝擴充套件包時,VS Code 還會安裝其擴充套件依賴項。

擴充套件包應在 Extension Packs Marketplace 類別中進行分類。

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

要建立擴充套件包,您可以使用 yo code Yeoman 生成器並選擇 **New Extension Pack** 選項。有一個選項可以使用您當前在 VS Code 例項中安裝的擴充套件集來填充包。這樣,您就可以輕鬆建立包含您喜歡的擴充套件的擴充套件包,將其釋出到 Marketplace,並與他人共享。

擴充套件包不應與其捆綁的擴充套件有任何功能性依賴關係,並且捆綁的擴充套件應獨立於包進行管理。如果一個擴充套件依賴於另一個擴充套件,則該依賴項應使用 extensionDependencies 屬性宣告。

擴充套件解除安裝鉤子

如果您的擴充套件在從 VS Code 解除安裝時需要進行清理,您可以在擴充套件的 package.json 的 scripts 部分下,為解除安裝鉤子 vscode:uninstall 註冊一個 node 指令碼。

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

當擴充套件在 VS Code 中完全解除安裝後(即在擴充套件解除安裝後重啟 VS Code 時),此指令碼將被執行。

注意: 只支援 Node.js 指令碼。

有用的 Node 模組

npmjs 上有幾個 Node.js 模組可以幫助您編寫 VS Code 擴充套件。您可以將它們包含在擴充套件的 dependencies 部分。

後續步驟

要了解有關 VS Code 可擴充套件性模型的更多資訊,請嘗試以下主題

© . This site is unofficial and not affiliated with Microsoft.