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

釋出擴充套件

建立高質量的擴充套件後,您可以將其釋出到 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 中提供的徽章(badges)可能不是 SVG,除非它們來自 受信任的徽章提供商
  • README.mdCHANGELOG.md 中的影像 URL 需要解析為 https URL。
  • README.mdCHANGELOG.md 中的影像可能不是 SVG,除非它們來自 受信任的徽章提供商

Visual Studio Code 使用 Azure DevOps 作為其市場服務。這意味著擴充套件的身份驗證、託管和管理都透過 Azure DevOps 提供。

vsce 只能使用 個人訪問令牌 釋出擴充套件。您需要至少建立一個才能釋出擴充套件。

獲取個人訪問令牌

首先,請按照文件 建立您自己的組織。在接下來的示例中,組織名稱為 vscode,您應根據情況使用您新的組織名稱。請注意,組織名稱不必與您的釋出者名稱相同。

  1. 從您的組織主頁(例如:https://dev.azure.com/vscode)開始,點選您的個人資料圖片旁邊的使用者設定下拉選單,然後選擇 **個人訪問令牌**。

    Personal settings menu

  2. 在 **個人訪問令牌** 頁面上,選擇 **新建令牌**。

    Create new token button

  3. 在“建立新的個人訪問令牌”模態框中,為令牌選擇以下詳細資訊:

    • 名稱:您為令牌選擇的任何名稱。
    • 組織:**所有可訪問的組織**。
    • 過期(可選):設定令牌所需的到期日期。
    • 範圍:**自定義**。
      • 點選 **範圍** 部分下方的 **顯示所有範圍** 連結。
      • 在範圍列表中,滾動到 **Marketplace** 並選擇 **Manage** 範圍。

    Create personal access token

  4. 點選 **建立**。

    您將看到新建立的個人訪問令牌。請 **複製** 它並儲存在安全的位置,您在 建立釋出者 時會用到它。

建立釋出者

**釋出者** 是一個能夠將擴充套件釋出到 Visual Studio Code 市場的身份。每個擴充套件都需要在其 package.json 檔案 中包含一個 publisher 識別符號。

要建立釋出者:

  1. 訪問 Visual Studio Marketplace 釋出者管理頁面

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

  3. 在左側窗格中,點選 **建立釋出者**。

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

    • **ID**:釋出者在 Marketplace 中使用的 **唯一** 識別符號,將出現在您的擴充套件 URL 中。ID 建立後無法更改。
    • **Name**:釋出者在 Marketplace 中顯示的 **唯一** 名稱,將與您的擴充套件一起展示。這可以是您的公司或品牌名稱。

    以下是 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 version 屬性,然後以更新後的版本釋出它。

注意

如果您在 git 倉庫中執行 vsce publish,它還將透過 npm-version 建立一個版本提交和標籤。預設的提交訊息是擴充套件的版本,但您可以使用 -m 標誌提供自定義提交訊息。(可以使用 %s 在提交訊息中引用當前版本)。

取消釋出擴充套件

您可以透過訪問 Visual Studio Marketplace 釋出者管理頁面,點選 **更多操作 > 取消釋出** 來取消釋出擴充套件。

Unpublish the extension via the Marketplace management page

取消釋出後,擴充套件的可用性狀態將變為 **已取消釋出**,並且將不再能從 Marketplace 和 Visual Studio Code 下載。

Unpublished extension

注意

當您取消釋出擴充套件時,Marketplace 會保留該擴充套件的統計資訊。該擴充套件仍然可以被公開發現,並透過現有的 API 訪問。

刪除擴充套件

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

  1. 自動刪除,使用 vsceunpublish 命令。

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

    Remove the extension via the Marketplace management page

在這兩種情況下,系統都會提示您透過輸入副檔名稱來確認刪除。請注意,刪除操作是 **不可逆的**。

注意

當您刪除擴充套件時,Marketplace 也會刪除所有擴充套件統計資訊。您可能希望先取消釋出您的擴充套件,而不是直接刪除它。

棄用擴充套件

您可以選擇棄用一個擴充套件,或者將其棄用並推薦另一個擴充套件或設定。被棄用的擴充套件將在 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

要將您的擴充套件標記為已棄用,請在 棄用擴充套件 的討論帖中留下評論。

注意

目前,擴充套件在 Marketplace 中不顯示為已棄用。此功能將在稍後提供。

打包擴充套件

如果您想:

  • 在您的 VS Code 例項上進行測試。
  • 不釋出到 Marketplace 而進行分發。
  • 私下與他人共享。

打包意味著建立一個包含您的擴充套件的 .vsix 檔案。然後,該檔案可以在 VS Code 中安裝。有些擴充套件會將其 .vsix 檔案作為 GitHub release 的一部分發布。

要打包擴充套件,請在擴充套件的根資料夾中執行以下命令:

vsce package

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

使用者如何安裝 .vsix 檔案到 VS Code:

  • 從 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 的客戶端上。此機制對穩定版和預覽版(Insiders)發行版都適用。

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

高階用法

Marketplace 整合

您可以自定義擴充套件在 Visual Studio Marketplace 中的外觀。請參閱 Go 擴充套件 作為示例。

以下是一些使您的擴充套件在 Marketplace 上看起來很棒的技巧:

  • 在擴充套件的根目錄中新增 README.md 檔案,其中包含您希望在擴充套件的 Marketplace 頁面上顯示的內容。

    注意

    如果您的 package.json 中有一個指向公共 GitHub 儲存庫的 repository 屬性,vsce 會自動檢測到它並相應地調整相對連結,預設情況下使用 main 分支。您可以在執行 vsce packagevsce publish 時使用 --githubBranch 標誌覆蓋它。您還可以使用 --baseContentUrl--baseImagesUrl 標誌為連結和影像設定基本 URL。

  • 在擴充套件的根目錄中新增 LICENSE 檔案,其中包含有關擴充套件許可證的資訊。

  • 在擴充套件的根目錄中新增 CHANGELOG.md 檔案,其中包含有關擴充套件變更歷史的資訊。

  • 在擴充套件的根目錄中新增 SUPPORT.md 檔案,其中包含有關如何獲得擴充套件支援的資訊。

  • 透過在 package.json 中使用 galleryBanner.color 屬性指定相應的十六進位制值,來設定 Marketplace 頁面的橫幅背景顏色。

  • 透過在 package.json 中使用 icon 屬性指定至少 128x128 畫素的 PNG 檔案(包含在您的擴充套件中)的相對路徑,來設定圖示。

請參閱 Marketplace 展示技巧 以獲取更多資訊。

驗證釋出者

您可以透過驗證與您的品牌或身份相關的 符合條件的域名 的所有權來成為 **已驗證釋出者**。一旦您的釋出者得到驗證,Marketplace 將在您的擴充套件詳情中新增一個已驗證徽章。

先決條件

要獲得驗證,釋出者必須在 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

    **注意**:注意到在您開始輸入後,**詳細資訊** 選項卡標題旁邊有一個星號(*)。這表示您有未儲存的更改。同樣的原因,**驗證** 按鈕暫時是停用的。

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

    Saved domain to verify

    將出現一個對話方塊視窗,其中提供了有關將 TXT 記錄新增到域名 DNS 配置的說明。

    TXT record verification

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

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

    Validation submitted

    一旦您的 TXT 記錄得到驗證,Marketplace 團隊將審查您的請求,並在 5 個工作日內告知您結果。驗證包括但不限於:域名、網站和擴充套件 信用記錄先決條件、內容合規性、合法性、信譽和積極聲譽。

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

Verified publisher manage

備註:

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

符合條件的域名

符合條件的域名滿足以下標準:

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

擴充套件定價標籤

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

要顯示定價標籤,請在您的 package.json 中新增 pricing 屬性。例如:

{
  "pricing": "Free"
}

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

注意

釋出擴充套件時,請確保使用 vsce 版本 >= 2.10.0,以便定價標籤正常工作。

擴充套件贊助

您可以選擇啟用贊助,讓使用者有機會支援您的工作。

要顯示贊助連結,請在您的 package.json 中新增 sponsor 屬性。例如:

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

釋出擴充套件時,請確保使用 vsce 版本 >= 2.9.1,以便贊助功能正常工作。

贊助連結將顯示在 Marketplace 和 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 來構建您的擴充套件。我們的 特定平臺擴充套件示例 可以作為學習的起點:其 工作流 啟用了使用特定平臺擴充套件支援為所有支援的 VS Code 目標分發原生 Node 模組作為依賴項的常見場景。

後續步驟

常見問題

當我嘗試釋出擴充套件時,收到“您已超出允許的標籤數量(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 以自動將您的擴充套件釋出到 Marketplace。

當我嘗試釋出擴充套件時,收到“錯誤:Marketplace 中已存在擴充套件“{name}””錯誤?

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

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

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

支援哪些包管理器?

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

我需要有關我的 VS Marketplace 帳戶的幫助,或在釋出擴充套件時需要支援?

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

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