🚀 在 VS Code 中

擴充功能主機

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

擴充功能主機設定

根據 VS Code 的設定,會有多個擴充功能主機在不同的位置以不同的執行階段執行。

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

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

設定 本機擴充功能主機 網頁擴充功能主機 遠端擴充功能主機
桌面上的 VS Code ✔️ ✔️
具有遠端功能的 VS Code (Container、SSH、WSL、GitHub Codespace、Tunnel) ✔️ ✔️ ✔️
適用於網頁的 VS Code (vscode.dev、github.dev) ✔️
適用於具有 Codespaces 的網頁的 VS Code ✔️ ✔️

擴充功能主機執行階段

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

偏好的擴充功能位置

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

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

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

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

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

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

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

穩定性與效能

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

  • 影響啟動效能
  • 減慢 UI 操作速度
  • 修改 UI

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