现已发布!阅读有关 11 月的新功能和修复的信息。

扩展主机

扩展主机 负责运行扩展。

扩展主机配置

根据 VS Code 的配置,有多个扩展主机在不同的位置以不同的运行时运行。

  • local – 在本地与用户界面同一台机器上运行的 Node.js 扩展主机。
  • web – 在浏览器中或本地与用户界面同一台机器上运行的 Web 扩展主机。
  • remote – 在容器或远程位置远程运行的 Node.js 扩展主机。

下表显示了 VS Code 的各种配置中可用的扩展主机

配置 本地扩展主机 Web 扩展主机 远程扩展主机
桌面上的 VS Code ✔️ ✔️
带有远程的 VS Code(容器、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 的 VS Code for Web 时,它将始终在远程扩展主机中运行(因为没有可用的本地扩展主机)。
  • "extensionKind": ["workspace", "ui"] — 表示扩展首选作为工作区扩展运行,但对访问工作区内容没有任何硬性要求。使用 VS Code 时,如果扩展在远程工作区中存在,则将在 VS Code 的工作区扩展主机中运行,否则如果扩展在本地存在,则将在 VS Code 的本地扩展主机中运行。当将带有 Codespaces 的 VS Code for Web 时,它将始终在远程扩展主机中运行(因为没有可用的本地扩展主机)。
  • "extensionKind": ["ui"] — 表示扩展必须在 UI 附近运行,因为它需要访问本地资产、设备或功能,或者因为需要低延迟。对于没有可用本地扩展主机的带有 Codespaces 的 VS Code for Web,此类扩展无法加载,除非它也是 Web 扩展。然后,它将在 Web 扩展主机中加载,但限制是它无法实例化 Web worker。

注意:早期 VS Code 版本 (<1.40) 允许扩展将单个位置指定为字符串,但这已弃用,而推荐将多个位置指定为数组。

如果扩展可以在 Node.js 和浏览器中运行,则如果可用,将选择 Node.js 扩展主机。有一个例外,当配置是带有 Codespaces 的 VS Code for Web 并且 extensionKind 设置为 ui 时,Web 扩展主机优先于远程扩展主机。

如果扩展仅限于 Web,它将始终在 Web 扩展主机上运行,而与 extensionKind 设置无关。我们建议在这种情况下不要定义 extensionKind

稳定性和性能

VS Code 旨在为用户提供稳定且高性能的编辑器,并且行为不当的扩展不应影响用户体验。VS Code 中的扩展主机可防止扩展执行以下操作

  • 影响启动性能
  • 减慢 UI 操作
  • 修改 UI

此外,VS Code 允许扩展声明其激活事件并延迟加载它们。例如,Markdown 扩展应仅在用户打开 Markdown 文件时加载。这确保了扩展不会消耗不必要的 CPU 和内存。