现已发布!了解 10 月份的新功能和修复。

扩展宿主

扩展宿主 负责运行扩展。

扩展宿主配置

根据 VS Code 的配置,会有多个扩展宿主运行,使用不同的运行时,位于不同的位置。

  • 本地 – 一个在与用户界面相同的机器上本地运行的 Node.js 扩展宿主。
  • Web – 一个在浏览器或本地运行的 Web 扩展宿主,位于与用户界面相同的机器上。
  • 远程 – 一个在容器或远程位置远程运行的 Node.js 扩展宿主。

下表显示了 VS Code 的各种配置中哪些扩展宿主可用。

配置 本地扩展宿主 Web 扩展宿主 远程扩展宿主
桌面上的 VS Code ✔️ ✔️
带有远程的 VS Code(容器、SSH、WSL、GitHub Codespace、隧道) ✔️ ✔️ ✔️
VS Code for the Web(vscode.dev、github.dev) ✔️
带有 Codespaces 的 VS Code for the Web ✔️ ✔️

扩展宿主运行时

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

注意:之前的 VS Code 版本(<1.40)允许扩展指定一个单一位置作为字符串,但现在已弃用,改为使用多个位置作为数组。

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

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

稳定性和性能

VS Code 旨在为用户提供稳定且高性能的编辑器,行为不端的扩展不应影响用户体验。VS Code 中的扩展宿主可防止扩展

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

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