🚀 在 VS Code 中取得

擴充功能主機

擴充功能主機負責執行擴充功能。

擴充功能主機組態

根據 VS Code 的組態,有多個擴充功能主機正在執行,它們具有不同的執行階段,位於不同的位置。

  • local – 在本機執行的 Node.js 擴充功能主機,與使用者介面位於同一部電腦上。
  • web – 在瀏覽器中或在本機執行的 Web 擴充功能主機,與使用者介面位於同一部電腦上。
  • remote – 在容器或遠端位置遠端執行的 Node.js 擴充功能主機。

下表顯示在 VS Code 的各種組態中可用的擴充功能主機

組態 本機擴充功能主機 Web 擴充功能主機 遠端擴充功能主機
桌面上的 VS Code ✔️ ✔️
具有遠端功能的 VS Code (Container、SSH、WSL、GitHub Codespace、通道) ✔️ ✔️ ✔️
適用於 Web 的 VS Code (vscode.dev、github.dev) ✔️
具有 Codespaces 的適用於 Web 的 VS Code ✔️ ✔️

擴充功能主機執行階段

  • Node.js - 擴充功能在 Node.js 執行階段中執行。由本機和遠端擴充功能主機使用。擴充功能需要一個 main 進入檔案才能在其中執行。
  • 瀏覽器 - 擴充功能在瀏覽器 WebWorker 執行階段中執行。由 Web 擴充功能主機使用。擴充功能需要一個 browser 進入檔案才能在其中執行。如需更多詳細資訊,請參閱Web 擴充功能指南

慣用的擴充功能位置

擴充功能載入所在的擴充功能主機取決於

  • VS Code 組態提供的可用擴充功能主機。
  • 擴充功能的功能:它是否可以在 Node.js 和/或 Web 中執行,或者如果未指示,它提供哪些貢獻?
  • 擴充功能安裝在哪裡:在本機、在遠端電腦上,或兩者皆是。
  • 擴充功能慣用的位置:extensionKind 屬性。

extensionKind擴充功能資訊清單中的屬性。它允許擴充功能指定慣用的執行位置。這可以是具有工作區 (workspace) 的電腦或使用者介面 (ui)。如果擴充功能可以在兩者上執行,它可以指定偏好順序。

  • "extensionKind": ["workspace"] — 表示擴充功能需要存取工作區內容,因此需要工作區所在的位置執行。這可以在本機或遠端電腦或 Codespace 上。大多數擴充功能都屬於此類別。
  • "extensionKind": ["ui", "workspace"] — 表示擴充功能偏好以 UI 擴充功能身分執行,但對本機資產、裝置或功能沒有任何硬性需求。當使用 VS Code 時,如果擴充功能在本機存在,則會在 VS Code 的本機擴充功能主機中執行,這表示使用者不必在遠端安裝擴充功能。否則,如果擴充功能在那裡存在,則會在 VS Code 的工作區擴充功能主機中執行。當使用具有 Codespaces 的適用於 Web 的 VS Code 時,它將始終在遠端擴充功能主機中執行 (因為沒有可用的本機擴充功能主機)。
  • "extensionKind": ["workspace", "ui"] — 表示擴充功能偏好以工作區擴充功能身分執行,但對存取工作區內容沒有任何硬性需求。當使用 VS Code 時,如果擴充功能在遠端工作區中存在,則會在 VS Code 的工作區擴充功能主機中執行,否則如果擴充功能在本機存在,則會在 VS Code 的本機擴充功能主機中執行。當使用具有 Codespaces 的適用於 Web 的 VS Code 時,它將始終在遠端擴充功能主機中執行 (因為沒有可用的本機擴充功能主機)。
  • "extensionKind": ["ui"] — 表示擴充功能必須靠近 UI 執行,因為它需要存取本機資產、裝置或功能,或者因為需要低延遲。在具有 Codespaces 的適用於 Web 的 VS Code 的情況下,由於沒有可用的本機擴充功能主機,因此這類擴充功能無法載入,除非它也是 Web 擴充功能。然後,它將載入 Web 擴充功能主機,但限制是它無法具現化 Web Worker。

注意:先前的 VS Code 版本 (<1.40) 允許擴充功能將單一位置指定為字串,但此做法已淘汰,改為支援將多個位置指定為陣列。

如果擴充功能可以在 Node.js 和瀏覽器中執行,則如果可用,將選取 Node.js 擴充功能主機。有一個例外,當組態為具有 Codespaces 的適用於 Web 的 VS Code,且 extensionKind 設定為 ui 時,則 Web 擴充功能主機優先於遠端擴充功能主機。

如果擴充功能僅限於 Web,則它將始終在 Web 擴充功能主機上執行,無論 extensionKind 設定為何。我們建議在這種情況下不要定義 extensionKind

穩定性與效能

VS Code 的目標是為使用者提供穩定且高效能的編輯器,行為不當的擴充功能不應影響使用者體驗。VS Code 中的擴充功能主機可防止擴充功能

  • 影響啟動效能
  • 降低 UI 作業速度
  • 修改 UI

此外,VS Code 允許擴充功能宣告其啟用事件並延遲載入它們。例如,Markdown 擴充功能應僅在使用者開啟 Markdown 檔案時載入。這確保擴充功能不會消耗不必要的 CPU 和記憶體。