參加你附近的 ,瞭解 VS Code 中的 AI 輔助開發。

釋出擴充套件

一旦您建立了一個高質量的擴充套件,您可以將其釋出到 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 Marketplace 釋出者管理頁面

  2. 使用您在上一節中建立 個人訪問令牌 時使用的相同 Microsoft 帳戶登入。

  3. 點選左側窗格中的 建立釋出者

  4. 在新頁面中,為新發布者指定強制引數 - 識別符號和名稱(分別為 ID名稱 欄位)。

    • ID:您在市場中釋出者的 唯一 識別符號,將用於您的擴充套件 URL。ID 一旦建立就無法更改。
    • 名稱:您在市場中與您的擴充套件一起顯示的釋出者的 唯一 名稱。這可以是您的公司或品牌名稱。

    以下是 Python 擴充套件的釋出者識別符號和名稱示例:

    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 Marketplace 釋出者管理頁面

    Add an extension through management page

檢視擴充套件安裝和評分

Visual Studio Marketplace 釋出者管理頁面 允許您檢視每個擴充套件隨時間變化的獲取趨勢,以及總獲取量和評分與評論。要檢視報告,請點選一個擴充套件或選擇 更多操作 > 報告

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 Marketplace 釋出者管理頁面 取消釋出擴充套件,方法是點選 更多操作 > 取消釋出

Unpublish the extension via the Marketplace management page

一旦取消釋出,擴充套件的可用性狀態將更改為 未釋出,並且將不再能從市場和 Visual Studio Code 下載。

Unpublished extension

注意

當您取消釋出擴充套件時,市場會保留擴充套件統計資訊。擴充套件仍然可以透過現有 API 公開發現和可用。

刪除擴充套件

您可以透過兩種方式刪除擴充套件:

  1. 自動,使用帶有 unpublish 命令的 vsce

    vsce unpublish <publisher id>.<extension name>
    
  2. 手動,從 Visual Studio Marketplace 釋出者管理頁面,點選 更多操作 > 刪除

    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

要將您的擴充套件標記為已棄用,請在 Deprecated extensions 討論串中留言。

注意

目前,擴充套件在市場中不顯示為已棄用。此功能將在以後可用。

打包擴充套件

如果您想執行以下操作,可以選擇打包擴充套件:

  • 在您的 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 的客戶端。此機制與穩定版和 Insider 版都很好地配合。

例如,假設 VS Code 的最新穩定版本是 1.8.0。在開發 1.9.0 版本期間,引入了一個新的 API,並透過 1.9.0-insider 版本在 Insider 版本中提供。如果您想釋出一個利用此 API 的擴充套件版本,您應該指明版本依賴性為 ^1.9.0。這樣,您的新擴充套件版本將只在 VS Code >=1.9.0(換句話說,使用當前 Insider 版本的使用者)上可用。使用 VS Code 穩定版的釋出將只在穩定版本達到 1.9.0 時獲得更新。

高階用法

市場整合

您可以自定義您的擴充套件在 Visual Studio Marketplace 中的顯示方式。有關示例,請參閱 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 Marketplace 上有一個或多個擴充套件,至少已存在 6 個月,並且域名註冊也必須至少有 6 個月。請等到滿足這些條件後再申請驗證。

Verified publisher indicators in VS Code

驗證釋出者:

  1. 轉到 Visual Studio Marketplace 釋出者管理頁面

  2. 在左側窗格中,選擇或 建立 您希望驗證的釋出者。

  3. 在主窗格中,選擇 詳細資訊 選項卡。

    Publisher details tab location

  4. 詳細資訊 選項卡中,在 已驗證域名 部分下,輸入一個 合格域名

    Publisher details tab with provided domain to verify

    注意:請注意,在您開始輸入後,詳細資訊 選項卡標題旁邊會顯示一個星號 (*)。就像在 VS Code 中一樣,這表示您有未儲存的更改。出於同樣的原因,驗證 按鈕仍處於停用狀態。

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

    Saved domain to verify

    將出現一個對話方塊視窗,為您提供有關向您的域的 DNS 配置新增 TXT 記錄的說明。

    TXT record verification

  6. 按照說明將 TXT 記錄新增到您的域的 DNS 配置中。

  7. 在對話方塊視窗中選擇 驗證 以驗證 TXT 記錄已成功新增。

    Validation submitted

    一旦您的 TXT 記錄透過驗證,市場團隊將審查您的請求,並在 5 個工作日內通知您結果。驗證包括但不限於:域、網站和擴充套件的 過往記錄先決條件、內容資格、合法性、信任和積極聲譽。

如果驗證透過,您將在 Visual Studio Marketplace 釋出者管理頁面中您的釋出者名稱旁邊看到相應的徽章。

Verified publisher manage

備註:

  • 釋出者顯示名稱的任何更改都將撤銷已驗證徽章。
  • 釋出者將來違反 使用條款 或上述驗證規定的任何行為都將撤銷已驗證徽章。

合格域名

合格域名滿足以下條件:

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

擴充套件定價標籤

您可以選擇在擴充套件的市場頁面上顯示一個定價標籤,以表明它是 免費免費試用

要顯示定價標籤,請將 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 會尋找與當前平臺匹配的擴充套件包。

如果您的擴充套件具有平臺特定庫或依賴項,平臺特定擴充套件非常有用,因此您可以控制平臺包中包含的確切二進位制檔案。一個常見的用例是使用原生 Node 模組

平臺特定擴充套件作為包含平臺特定內容的單獨包釋出。您可以透過傳遞 --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 來構建您的擴充套件。我們的 平臺特定擴充套件示例 可以作為學習的起點:其 工作流 實現了使用平臺特定擴充套件支援將原生 Node 模組作為依賴項分發到所有受支援的 VS Code 目標的常見場景。

後續步驟

常見問題

當我嘗試釋出擴充套件時,收到“您超出了允許的 30 個標籤數量”錯誤怎麼辦?

Visual Studio Marketplace 不允許擴充套件包在 package.json 中有超過 30 個 keywords。將關鍵字/標籤的數量限制在最多 30 個,以避免此錯誤。

當我嘗試釋出擴充套件時,收到 403 Forbidden(或 401 Unauthorized)錯誤怎麼辦?

在建立 PAT(個人訪問令牌)時,一個常見的錯誤是在 組織 欄位下拉列表中選擇了特定組織而不是 所有可訪問的組織。另一個可能的錯誤是範圍不正確——您應該將授權範圍設定為 Marketplace (Manage) 才能釋出。

我無法透過 vsce 工具取消釋出我的擴充套件?

您可能更改了您的擴充套件 ID 或釋出者 ID。您也可以直接透過 Visual Studio Marketplace 釋出者管理頁面 管理您的擴充套件。例如,更新或 取消釋出

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

請注意,從 Windows 構建和釋出擴充套件時,擴充套件包中包含的所有檔案都將缺少 POSIX 檔案屬性,即可執行位。一些 node_modules 依賴項依賴這些屬性才能正常工作。從 Linux 和 macOS 釋出按預期工作。

我可以從持續整合 (CI) 構建釋出嗎?

是的,請參閱 持續整合 主題的 自動釋出 部分,瞭解如何配置 Azure DevOps、GitHub Actions 和 GitLab CI 以自動將您的擴充套件釋出到市場。

當我嘗試釋出擴充套件時,收到“ERROR 擴充套件 'name' 已存在於市場中”錯誤怎麼辦?

市場要求每個擴充套件的 副檔名稱 都是唯一的。如果市場中已存在同名擴充套件,您將收到以下錯誤:

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

相同的規則也適用於擴充套件的 顯示名稱

支援哪些包管理器?

您可以使用 npm 或 yarn v1 來管理您的擴充套件依賴項。

我的 VS Marketplace 帳戶需要幫助,或者在釋出擴充套件方面需要支援?

您可以登入 管理釋出者和擴充套件,然後點選右上角的“聯絡 Microsoft”連結,與 VS Marketplace 支援團隊聯絡。