🚀 在 VS Code 中免費取得

發佈擴充功能

一旦您製作出高品質的擴充功能,就可以將其發佈到 VS Code 擴充功能市集,以便其他人可以尋找、下載和使用您的擴充功能。或者,您可以將擴充功能封裝成可安裝的 VSIX 格式,並與其他使用者分享。

本主題涵蓋

vsce

vsce,是 "Visual Studio Code Extensions" 的縮寫,是一個用於封裝、發佈和管理 VS Code 擴充功能的命令列工具。

安裝

請確保您已安裝 Node.js。然後執行

npm install -g @vscode/vsce

用法

您可以使用 vsce 輕鬆地封裝發佈您的擴充功能

$ cd myExtension
$ vsce package
# myExtension.vsix generated
$ vsce publish
# <publisher id>.myExtension published to VS Code Marketplace

vsce 也可以搜尋、檢索中繼資料和取消發佈擴充功能。如需所有可用 vsce 命令的參考,請執行 vsce --help

發佈擴充功能


注意

由於安全考量,vsce 不會發佈包含使用者提供的 SVG 圖片的擴充功能。

發佈工具會檢查以下限制

  • package.json 中提供的圖示不得為 SVG。
  • package.json 中提供的徽章不得為 SVG,除非它們來自受信任的徽章提供者
  • README.mdCHANGELOG.md 中的圖片 URL 需要解析為 https URL。
  • README.mdCHANGELOG.md 中的圖片不得為 SVG,除非它們來自受信任的徽章提供者

Visual Studio Code 使用 Azure DevOps 作為其市集服務。這表示擴充功能的驗證、託管和管理都是透過 Azure DevOps 提供。

vsce 只能使用 個人存取權杖 發佈擴充功能。您需要至少建立一個才能發佈擴充功能。

取得個人存取權杖

首先,請依照文件建立您自己的組織在 Azure DevOps 中。在以下範例中,組織名稱為 vscode,您應該視情況使用您的新組織名稱。請注意,組織名稱不一定與您的發行者名稱相同。

  1. 從您組織的首頁(例如:https://dev.azure.com/vscode),開啟您個人資料圖片旁邊的「使用者設定」下拉式選單,然後選取 個人存取權杖

    Personal settings menu

  2. 個人存取權杖 頁面上,選取 新增權杖

    Create new token button

  3. 在「建立新的個人存取權杖」對話方塊中,為權杖選取以下詳細資訊

    • 名稱:您想要的權杖名稱
    • 組織:所有可存取的組織
    • 到期日(選填):設定權杖的所需到期日
    • 範圍:自訂定義
      • 按一下 範圍 區段下方的 顯示所有範圍 連結
      • 在「範圍」清單中,捲動至 市集 並選取 管理 範圍

    Create personal access token

  4. 按一下 建立

    您將看到新建立的個人存取權杖。複製 它到安全的位置,您將需要它來建立發行者

建立發行者

發行者 是一種身分識別,可以將擴充功能發佈到 Visual Studio Code 市集。每個擴充功能都需要在其 package.json 檔案中包含 publisher 識別碼。

若要建立發行者

  1. 前往 Visual Studio 市集發行者管理頁面

  2. 使用您在上一節中用於建立個人存取權杖的相同 Microsoft 帳戶登入。

  3. 按一下左側窗格中的 建立發行者

  4. 在新頁面中,指定新發行者的強制性參數 - 識別碼和名稱(分別為 ID名稱 欄位)

    • ID:您在市集中的發行者的唯一識別碼,將在您的擴充功能 URL 中使用。ID 一旦建立就無法變更。
    • 名稱:您的發行者的唯一名稱,將在市集中與您的擴充功能一起顯示。這可以是您的公司或品牌名稱。

    以下是 Docker 擴充功能的發行者識別碼和名稱的範例

    Example of publisher identifier and name

  5. 選擇性地填寫其餘欄位。

  6. 按一下 建立

  7. 使用 vsce 驗證新建立的發行者。在您的終端機中,執行以下命令,並在出現提示時,輸入在上一步中建立的個人存取權杖

    vsce login <publisher id>
    
    https://marketplace.visualstudio.com/manage/publishers/
    Personal Access Token for publisher '<publisher id>': ****************************************************
    
    The Personal Access Token verification succeeded for the publisher '<publisher id>'.
    

驗證完成後,您就可以發佈擴充功能了。

發佈擴充功能

您可以透過兩種方式發佈擴充功能

  1. 自動,使用 vsce publish 命令

    vsce publish
    

    如果您尚未透過上述 vsce login 命令提供您的個人存取權杖,vsce 將會要求您提供。

  2. 手動,使用 vsce package 將擴充功能封裝成可安裝的 VSIX 格式,然後將其上傳到 Visual Studio 市集發行者管理頁面

    Add an extension through management page

檢閱擴充功能安裝和評分

Visual Studio 市集發行者管理頁面 讓您可以存取每個擴充功能在一段時間內的取得趨勢,以及總取得計數和評分與評論。若要查看報告,請按一下擴充功能或選擇 更多動作 > 報告

Marketplace extension report

自動遞增擴充功能版本

發佈擴充功能時,您可以透過指定 SemVer 相容的數字或版本(majorminorpatch)來自動遞增其版本號碼。例如,若要將擴充功能的版本從 1.0.0 更新為 1.1.0,您將指定

vsce publish minor

vsce publish 1.1.0

這兩個命令都會先修改擴充功能的 package.json 版本 屬性,然後使用更新後的版本發佈它。

注意

如果您在 git 儲存庫中執行 vsce publish,它也會透過 npm-version 建立版本提交和標籤。預設提交訊息將是擴充功能的版本,但您可以使用 -m 旗標提供自訂提交訊息。(目前版本可以從提交訊息中以 %s 引用)。

取消發佈擴充功能

您可以從 Visual Studio 市集發行者管理頁面 取消發佈擴充功能,方法是按一下 更多動作 > 取消發佈

Unpublish the extension via the Marketplace management page

取消發佈後,擴充功能的「可用性」狀態會變更為 已取消發佈,並且將不再可從市集和 Visual Studio Code 下載

Unpublished extension

注意

當您取消發佈擴充功能時,市集會保留擴充功能統計資料。

移除擴充功能

您可以透過兩種方式移除擴充功能

  1. 自動,使用 vsceunpublish 命令

    vsce unpublish <publisher id>.<extension name>
    
  2. 手動,從 Visual Studio 市集發行者管理頁面,按一下 更多動作 > 移除

    Remove the extension via the Marketplace management page

在這兩種情況下,系統都會提示您輸入擴充功能名稱以確認移除。請注意,移除動作是 不可逆的

注意

當您移除擴充功能時,市集也會移除任何擴充功能統計資料。您可能想要取消發佈您的擴充功能,而不是移除它。

棄用擴充功能

您可以僅棄用擴充功能,或棄用以支持另一個擴充功能或設定。已棄用的擴充功能將在 UI 中以變暗的刪除線文字呈現

Rust extension shown as deprecated in extension search

每個已棄用的擴充功能在其擴充功能磚的右下角都有一個黃色警告圖示(請參閱上面的螢幕擷取畫面)。當您將滑鼠游標停留在擴充功能磚上時,您可以在此圖示旁邊看到棄用詳細資訊,無論是

  • 擴充功能已棄用,沒有任何替代方案

    Deprecated extension without alternatives

  • 擴充功能已棄用,以支持另一個擴充功能

    Deprecated extension with an alternative extension

  • 擴充功能已棄用,以支持設定

    Deprecated extension with an alternative setting

VS Code 不會自動遷移或解除安裝已安裝的已棄用擴充功能。如果已棄用的擴充功能有替代擴充功能或設定,VS Code 將顯示 遷移 按鈕,以協助您快速切換到指定的替代方案

Deprecated extension with a migrate button

若要將您的擴充功能標記為已棄用,請在 已棄用擴充功能 討論串中留下評論。

注意

目前,擴充功能在市集中不會呈現為已棄用。此功能將在稍後提供。

封裝擴充功能

如果您想要執行以下操作,您可以選擇封裝您的擴充功能

  • 在您的 VS Code 執行個體上測試它。
  • 在不發佈到市集的情況下發佈它。
  • 與其他人私下分享它。

封裝表示建立一個包含您擴充功能的 .vsix 檔案。然後可以在 VS Code 中安裝此檔案。某些擴充功能會發佈 .vsix 檔案作為其 GitHub 版本的一部分。

若要封裝擴充功能,請在您擴充功能的根資料夾中執行以下命令

vsce package

此命令會在您擴充功能的根資料夾中建立一個 .vsix 檔案。例如,my-extension-0.0.1.vsix

對於使用者,若要在 VS Code 中安裝 .vsix 檔案

  • 從 VS Code 中的「擴充功能」檢視

    1. 前往「擴充功能」檢視。
    2. 選取 檢視和更多動作...
    3. 選取 從 VSIX 安裝...
  • 從命令列

    # if you use VS Code
    code --install-extension my-extension-0.0.1.vsix
    
    # if you use VS Code Insiders
    code-insiders --install-extension my-extension-0.0.1.vsix
    

您的擴充功能資料夾

若要載入擴充功能,您需要將檔案複製到您的 VS Code 擴充功能資料夾 .vscode/extensions。根據您的作業系統,此資料夾有不同的位置

  • Windows: %USERPROFILE%\.vscode\extensions
  • macOS: ~/.vscode/extensions
  • Linux: ~/.vscode/extensions

Visual Studio Code 相容性

在撰寫擴充功能時,您必須指定您的擴充功能相容的 VS Code 版本。若要執行此操作,請使用 package.json 內的 engines.vscode 屬性

{
  "engines": {
    "vscode": "^1.8.0"
  }
}
  • 1.8.0(不含插入符號)表示您的擴充功能僅與 VS Code 1.8.0 相容。
  • ^1.8.0 表示您的擴充功能與 VS Code 1.8.0 及更高版本相容,包括 1.8.11.9.0 等。

您可以使用 engines.vscode 屬性,確保擴充功能僅針對包含您所依賴 API 的用戶端安裝。此機制與 Stable 和 Insiders 版本都能良好配合。

例如,假設最新穩定版本的 VS Code 是 1.8.0。在版本 1.9.0 的開發期間,引入了一個新的 API,並透過版本 1.9.0-insider 在 Insider 版本中提供。如果您想要發佈受益於此 API 的擴充功能版本,您應該指出 ^1.9.0 的版本相依性。透過這種方式,您的新擴充功能版本將僅在 VS Code >=1.9.0 上可用(換句話說,使用目前 Insiders 版本的用戶)。使用 VS Code Stable 的使用者只有在 Stable 版本達到 1.9.0 版時才會收到更新。

進階用法

市集整合

您可以自訂您的擴充功能在 Visual Studio 市集中的外觀。請參閱 Go 擴充功能 作為範例。

以下是一些讓您的擴充功能在市集中看起來很棒的訣竅

  • README.md 檔案新增至您的擴充功能根目錄,其中包含您想要在擴充功能市集頁面上顯示的內容。

    注意

    如果您的 package.json 中有指向公用 GitHub 儲存庫的 repository 屬性,vsce 將會自動偵測到它,並相應地調整相對連結,預設使用 main 分支。您可以在執行 vsce packagevsce publish 時使用 --githubBranch 旗標覆寫此設定。您也可以使用 --baseContentUrl--baseImagesUrl 旗標設定連結和圖片的基本 URL。

  • LICENSE 檔案新增至您的擴充功能根目錄,其中包含有關擴充功能授權的資訊。

  • CHANGELOG.md 檔案新增至您的擴充功能根目錄,其中包含有關您的擴充功能變更歷史記錄的資訊。

  • SUPPORT.md 檔案新增至您的擴充功能根目錄,其中包含有關如何取得擴充功能支援的資訊。

  • 透過在 package.json 中指定對應的十六進位值,在市集頁面上設定橫幅背景顏色 galleryBanner.color 屬性。

  • 透過在 package.json 中指定 icon 屬性,設定圖示,指定包含在您的擴充功能中 128x128px PNG 檔案的相對路徑。

請參閱 市集呈現訣竅 以取得更多資訊。

驗證發行者

您可以透過驗證與您的品牌或身分相關聯的符合資格的網域的所有權,成為 已驗證的發行者。一旦您的發行者經過驗證,市集將在您的擴充功能詳細資訊中新增已驗證徽章。

先決條件

若要獲得驗證,發行者必須在 VS 市集中擁有一個或多個擴充功能至少 6 個月,並且網域的註冊也必須至少 6 個月。請等到滿足這些條件後再申請驗證。

Verified publisher indicators in VS Code

若要驗證發行者

  1. 前往 Visual Studio 市集發行者管理頁面

  2. 在左側窗格中,選取或建立您想要驗證的發行者

  3. 在主窗格中,選取 詳細資料 索引標籤。

    Publisher details tab location

  4. 詳細資料索引標籤 中,在 已驗證網域 區段下,輸入符合資格的網域

    Publisher details tab with provided domain to verify

    注意:在您開始輸入後,請注意 詳細資料 索引標籤標題旁邊的星號 (*)。就像在 VS Code 中一樣,這表示您有未儲存的變更。基於相同原因,驗證 按鈕仍停用。

  5. 選取 儲存,然後選取 驗證

    Saved domain to verify

    將會出現一個對話視窗,提供有關將 TXT 記錄新增至您網域的 DNS 組態的指示。

    TXT record verification

  6. 依照指示將 TXT 記錄新增至您網域的 DNS 組態。

  7. 在對話視窗中選取 驗證,以驗證 TXT 記錄是否已成功新增。

    Validation submitted

    一旦您的 TXT 記錄經過驗證,市集團隊將會審查您的要求,並在 5 個工作天內告知您結果。驗證包括但不限於:網域、網站和擴充功能追蹤記錄的先決條件、內容資格、合法性、信任和良好聲譽。

如果驗證通過,您將在 Visual Studio 市集發行者管理頁面中看到您的發行者名稱旁邊的對應徽章

Verified publisher manage

注意事項:

  • 任何發行者顯示名稱的變更都將撤銷已驗證徽章。
  • 發行者未來違反 使用條款 或上述提及的驗證將撤銷已驗證徽章。

符合資格的網域

符合資格的網域符合以下條件

  • 您必須能夠管理 DNS 組態設定並新增 TXT 記錄。
  • 它不是子網域 ({subdomain}.github.io、{subdomain}.contoso.com 或類似網域)。
  • 它必須使用 HTTPS 協定。
  • 它必須能夠對 HEAD 要求回應 HTTP 200 狀態。

擴充功能定價標籤

您可以選擇在您的擴充功能市集頁面上顯示定價標籤,以指示它是 FreeFree Trial

若要顯示定價標籤,請將 pricing 屬性新增至您的 package.json。例如

{
  "pricing": "Free"
}

允許的值為:FreeTrial(區分大小寫)。當未指定 pricing 屬性時,預設值為 Free

注意

請確保在發佈擴充功能時使用 vsce 版本 >= 2.10.0,定價標籤才能運作。

擴充功能贊助者

您可以選擇加入贊助,讓您的使用者可以支持您的工作。

若要顯示贊助者連結,請將 sponsor 屬性新增至您的 package.json。例如

"sponsor": {
  "url": "https://github.com/sponsors/nvaccess"
}
注意

請確保在發佈擴充功能時使用 vsce 版本 >= 2.9.1,贊助才能運作。

贊助者連結將會出現在您的擴充功能在市集和 VS Code 中的頁面上的擴充功能詳細資訊標頭中

Sponsor link in extension details page

我們希望這將允許我們的使用者資助他們所依賴的擴充功能,以改善擴充功能的效能、可靠性和穩定性。

使用 .vscodeignore

您可以建立 .vscodeignore 檔案,以防止某些檔案包含在您的擴充功能套件中。此檔案是 glob 模式的集合,每行一個。例如

**/*.ts
**/tsconfig.json
!file.ts

您應該忽略所有執行階段不需要的檔案。例如,如果您的擴充功能是以 TypeScript 撰寫的,您應該忽略所有 **/*.ts 檔案,就像上面的範例一樣。

注意

devDependencies 中列出的開發相依性將會自動忽略,因此您不需要明確新增它們。

發佈前步驟

您可以在您的資訊清單檔案中新增發佈前步驟,每次封裝擴充功能時都會呼叫該步驟。例如,您可能想要在此階段呼叫 TypeScript 編譯器

{
  "name": "uuid",
  "version": "0.0.1",
  "publisher": "someone",
  "engines": {
    "vscode": "0.10.x"
  },
  "scripts": {
    "vscode:prepublish": "tsc"
  }
}

預先發佈擴充功能

使用者可以在 VS Code 或 VS Code Insiders 中安裝擴充功能的預先發佈版本,以定期在正式擴充功能發佈之前取得最新的擴充功能版本。

GitHub PR extension pre-release version in the extensions view

若要發佈預先發佈版本,請將 --pre-release 旗標傳遞至 vsce packagevsce publish 命令

vsce package --pre-release
vsce publish --pre-release

我們僅支援 major.minor.patch 作為擴充功能版本,不支援 semver 預先發佈標籤。預先發佈版本和常規版本之間的版本必須不同。也就是說,如果 1.2.3 作為預先發佈版本上傳,則下一個常規版本必須以不同的版本上傳,例如 1.2.4。完整的 semver 支援將在未來提供。

VS Code 將自動將擴充功能更新為可用的最高版本,因此即使使用者選擇加入預先發佈版本,並且有版本較高的擴充功能發佈,使用者也會更新到發佈的版本。因此,我們建議擴充功能使用 major.EVEN_NUMBER.patch 作為發佈版本,並使用 major.ODD_NUMBER.patch 作為預先發佈版本。例如:0.2.* 用於發佈,0.3.* 用於預先發佈。

如果擴充功能作者不希望其預先發佈使用者更新到發佈版本,我們建議始終在發佈發佈版本之前遞增並發佈新的預先發佈版本,以確保預先發佈版本始終較高。請注意,雖然預先發佈使用者將更新到版本較高的發佈版本,但他們仍然有資格自動更新到版本號碼高於發佈版本的未來預先發佈版本。

VS Code 版本 1.63.0 之後支援預先發佈擴充功能,因此所有預先發佈擴充功能都應該將其 package.json 中的 engines.vscode 值設定為 >= 1.63.0

注意

已經有獨立預先發佈擴充功能的擴充功能應聯繫 VS Code 團隊,以啟用自動解除安裝過時的獨立擴充功能,並安裝主要擴充功能的預先發佈版本。

平台特定擴充功能

您可以為每個執行 VS Code 的平台(Windows、Linux、macOS)發佈您的擴充功能的 VSIX 套件。我們將此類擴充功能稱為 平台特定

從版本 1.61.0 開始,VS Code 會尋找與目前平台相符的擴充功能套件。

如果您的擴充功能具有平台特定程式庫或相依性,則平台特定擴充功能很有用,因此您可以控制平台套件中包含的確切二進位檔。常見的用例是使用 原生節點模組

平台特定擴充功能會發佈為包含平台特定內容的個別套件。您可以透過傳遞 --target 旗標 來指定目標平台。如果您未傳遞此旗標,則該套件將用作所有沒有平台特定套件的平台的後備方案。

目前可用的平台包括:win32-x64win32-arm64linux-x64linux-arm64linux-armhfalpine-x64alpine-arm64darwin-x64darwin-arm64web

如果您希望平台特定擴充功能也支援在瀏覽器中作為 Web 擴充功能 執行,則在發佈時 必須web 平台為目標。web 平台尊重 package.json 中的 browser 進入點。若要停用 Web 中不支援的擴充功能功能,我們建議在 package.json 中使用 when 子句,而不是為 Web 平台運送個別的 package.json 或移除 VSIX 中在 Web 中無法運作的部分。

發佈

從版本 1.99.0 開始,vsce 支援 --target 參數,可讓您在封裝和發佈 VSIX 時指定目標平台。

以下是如何發佈 win32-x64win32-arm64 平台的 VSIX

vsce publish --target win32-x64 win32-arm64

或者,您也可以在封裝時使用 --target 旗標來建立平台特定 VSIX。例如,若要封裝 win32-x64 平台的 VSIX,然後發佈它

vsce package --target win32-x64
vsce publish --packagePath PATH_TO_WIN32X64_VSIX

持續整合

管理多個平台特定 VSIX 可能會變得難以負荷,因此我們建議使用 持續整合 (CI) 工具自動化您的擴充功能組建流程。例如,您可以使用 GitHub Actions 來組建您的擴充功能。我們的 平台特定擴充功能範例 可以用作學習的起點:其 工作流程 啟用使用平台特定擴充功能支援跨所有支援的 VS Code 目標發佈原生節點模組作為相依性的常見情境。

後續步驟

常見問題

當我嘗試發佈我的擴充功能時,收到「您超過了允許的 10 個標籤數量」錯誤?

Visual Studio 市集不允許擴充功能套件在 package.json 中擁有超過 10 個 keywords。將關鍵字/標籤的數量保持在 10 個以下,以避免此錯誤。

當我嘗試發佈我的擴充功能時,收到 403 Forbidden(或 401 Unauthorized)錯誤?

建立 PAT(個人存取權杖)時,一個容易犯的錯誤是在 組織 欄位下拉式選單中選取特定組織,而不是 所有可存取的組織。另一個可能的錯誤是不正確的範圍 - 您應該將「授權範圍」設定為 Marketplace (管理),發佈才能運作。

我無法透過 vsce 工具取消發佈我的擴充功能?

您可能已變更您的擴充功能 ID 或發行者 ID。您也可以直接透過 Visual Studio 市集發行者管理頁面 管理您的擴充功能。例如,更新或取消發佈

為什麼 vsce 不保留檔案屬性?

請注意,當從 Windows 組建和發佈您的擴充功能時,擴充功能套件中包含的所有檔案都將缺少 POSIX 檔案屬性,即執行位。某些 node_modules 相依性依賴這些屬性才能正常運作。從 Linux 和 macOS 發佈可如預期般運作。

我可以從持續整合 (CI) 組建發佈嗎?

可以,請參閱 持續整合 主題的 自動化發佈 區段,以瞭解如何設定 Azure DevOps、GitHub Actions 和 GitLab CI 以自動將您的擴充功能發佈到市集。

當我嘗試發佈我的擴充功能時,收到「錯誤:擴充功能 'name' 已存在於市集中」錯誤?

市集要求每個擴充功能的擴充功能名稱都是唯一的。如果市集中已存在具有相同名稱的擴充功能,您將收到以下錯誤

ERROR The extension 'name' already exists in the Marketplace.

相同的規則適用於擴充功能的顯示名稱

支援哪些套件管理器?

您可以使用 npm 或 yarn v1 來管理您的擴充功能的相依性。

我需要有關我的 VS 市集帳戶的協助或發佈擴充功能的支援?

若要聯絡 VS Marketplace 支援團隊,您可以在 管理發行者與擴充功能 登入,然後點擊右上角的「Contact Microsoft」連結。