本站点文档内容均翻译自code.visualstudio.com,仅供个人学习,如有差异请以官网为准。

扩展主机

扩展主机负责运行扩展。

扩展主机配置

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

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

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

配置 本地扩展主机 网页扩展主机 远程扩展主机
桌面 VS Code ✔️ ✔️
带远程的 VS Code (容器, SSH, WSL, GitHub Codespace, 隧道) ✔️ ✔️ ✔️
VS Code for the Web (vscode.dev, github.dev) ✔️
VS Code 通过 Codespaces 在网页上使用 ✔️ ✔️

扩展主机运行时

  • Node.js - 扩展在Node.js运行时运行。由本地和远程扩展主机使用。扩展需要一个主要运行其中的入口文件。
  • 浏览器 - 扩展在浏览器Web Worker运行时运行。由网络扩展主机使用。扩展需要一个浏览器 运行其中的入口文件。请参阅 Web 扩展指南 了解更多信息。

首选扩展位置

扩展程序加载的扩展主机取决于:

  • VS Code 配置提供的可用扩展主机。
  • 扩展功能的能力:它是否可以在 Node.js、和/或网页中运行,如果没有明确说明,它提供了什么贡献?
  • 扩展安装在哪里:本地机器、远程机器还是两者都安装。
  • 扩展程序首选的位置:扩展类型财产。

扩展类型扩展清单 中的属性。它允许扩展指定首选运行位置。那可以是具有工作区的机器 (工作区) 或用户界面 (用户界面如果一个扩展可以在两者之间运行,它可以指定一个优先顺序。

  • "extensionKind": ["workspace"]— 表示该扩展需要访问工作区内容,因此需要在工作区所在的位置运行。这可以是在本地机器上,也可以是在远程机器或Codespace上。大多数扩展都属于这一类。
  • "extensionKind": ["ui", "workspace"] — 表示扩展更喜欢以UI扩展的形式运行,但对本地资产、设备或能力没有硬性要求。当使用VS Code时,如果本地存在VS Code的本地扩展主机,扩展将在本地扩展主机上运行,这意味着用户不需要在远程设备上安装扩展。否则,如果VS Code的工作区扩展主机存在,扩展将在工作区扩展主机上运行。当使用VS Code for Web和Codespaces时,它将始终在远程扩展主机上运行(因为没有本地扩展主机可用)。
  • "extensionKind": ["workspace", "ui"] — 表示扩展更喜欢以工作区扩展的形式运行,但对访问工作区内容没有硬性要求。当使用 VS Code 时,如果在远程工作区中存在,扩展将在 VS Code 的工作区扩展主机中运行,否则如果在本地存在,将在 VS Code 的本地扩展主机中运行。当使用 VS Code for the Web 和 Codespaces 时,它将始终在远程扩展主机中运行(因为没有本地扩展主机可用)。
  • "extensionKind": ["ui"] — 表示扩展 必须 运行靠近用户界面,因为它需要访问本地资产、设备或功能,或者因为需要低延迟。在 VS Code for Web 与 Codespaces 的情况下,如果没有可用的本地扩展主机,这样的扩展将无法加载,除非它也是一个 网络扩展。然后它将被加载到网络扩展主机中,并且有一个限制,即它不能实例化网络工人。

注意: 之前的 VS Code 版本(<1.40)允许扩展指定单个位置为字符串,但此功能已被弃用,建议使用数组表示多个位置。

如果一个扩展可以在 Node.js 和浏览器中运行,如果有可用的 Node.js 扩展主机,将选择 Node.js 扩展主机。有一个例外,当配置是带有 Codespaces 的 VS Code for the Web 时。扩展类型被设置为用户界面,则优先选择网络扩展主机而不是远程扩展主机。

如果一个扩展是仅限网页的,它将始终在网页扩展主机上运行,无论扩展类型设置。我们建议不要定义扩展类型在这种情况下。

稳定性和性能

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

  • 影响创业表现
  • 减缓用户界面操作
  • 修改用户界面

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