现已发布!阅读关于 11 月新增功能和修复的内容。

扩展宿主

扩展宿主 负责运行扩展。

扩展宿主配置

根据 VS Code 的配置,有多个扩展宿主在运行,它们拥有不同的运行时、位于不同的位置。

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

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

配置 本地扩展宿主 Web 扩展宿主 远程扩展宿主
桌面版 VS Code ✔️ ✔️
带远程连接的 VS Code (容器、SSH、WSL、GitHub Codespace、Tunnel) ✔️ ✔️ ✔️
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 和内存。

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