现已推出!阅读 10 月份的新功能和修复。

使用 VS Code 进行远程开发

2019 年 5 月 2 日 由 VS Code 团队发布,@code

TL;DR

今天,我们很高兴地宣布 Visual Studio Code 的三个新扩展的预览版,这些扩展可以让您在 容器 中、物理或虚拟机上远程,以及使用 Windows 子系统 for Linux (WSL) 进行无缝开发。您可以 立即开始,方法是安装 远程开发扩展包

注意:您现在需要使用 Insiders 版本,但远程开发支持最终将在稳定版中提供。

继续阅读以了解我们是如何走到这一步的。

随着 VS Code 的流行,我们有幸也有机会与越来越多使用不同开发环境的用户交谈,许多用户的环境与我们自己的环境大不相同,我们试图找出可以推动 VS Code 向前发展的方法,以解决开发人员遇到的实际痛点。

在这些对话中出现了一个有趣的模式。我们看到许多开发人员试图使用 VS Code 来开发针对容器和远程 VM,这些容器和远程 VM 配置了特定的开发和运行时堆栈,仅仅是因为在本地设置这些开发环境太难、太麻烦,在某些情况下甚至不可能。

我们都遇到过这个问题。除非我们觉得该“清理”机器了 :),否则我们会犹豫尝试新的堆栈,如 Rust、Go、Node 或 Python3,因为害怕“搞乱”我们当前的、精心调整的环境。

Python 开发人员希望切换到 VS Code,但无法做到,因为他们需要使用 容器和虚拟机 作为为特定 Python 堆栈配置的开发环境。

Vagrant Box testimonial

由于代码库非常庞大,我们看到 Facebook(以及微软!)等公司的工程师使用像 vim 这样的编辑器来远程处理安全的、强大的“开发 VM”,使用替代的基于云的搜索和导航服务,这些服务可以扩展到甚至最好的笔记本电脑都无法处理的程度。

构建和训练数据模型的数据科学家通常需要大量的存储和计算服务来分析大型数据集,这些数据集甚至无法在强大的台式机上存储或处理。

Windows 子系统 for Linux (WSL) 的流行度不断上升,部分原因是它可以轻松设置一个封闭的开发环境,包括目标操作系统。实际上,VS Code 存储库中评论最多的第三个问题是如何支持在 Windows 上的 Linux 发行版的 Bash 终端中运行 code

VS Code Ubuntu on Windows testimonial

当前解决方案的挑战

在这些对话中,我们还不断听到开发人员使用这种类型的开发所面临的相同挑战。

  • 远程桌面可以工作,但在某些 Linux 发行版上很难或无法设置,而且开发体验可能“延迟”。

  • SSH 和 Vim(或使用文件同步的本地工具)可以使用,但它们可能很慢、容易出错,而且总体上 缺乏现代开发工具的效率

  • 基于浏览器的工具在各种场景中都很有用,但开发人员不想放弃桌面工具提供的丰富性和熟悉性,或者他们现有的本地安装的工具链。

更糟糕的是(在我们看来!)开发人员不得不牺牲 VS Code 的核心体验,如 IntelliSense(自动完成)、代码整理和调试,以便在这些环境中工作。

不同的方法

听到这些挑战,我们开始研究 WSL 支持,看起来很简单。安装 VS Code 并且(当时要小心!)像往常一样编辑 Windows 文件系统。我们确实做了些工作来 为 Node.js 启用远程调试,我们认为可以简单地安装一个小型脚本,以启用从 bash shell 启动 code

但是,这并不对。为每个运行时做特殊的工作并不合理,就像我们为 Node.js 调试所做的那样。如果您在 Windows 上安装了 Python 2.7 和 Flask(或者根本没有!),并在 Linux 发行版中安装了 Python 3.7 和 Django,您将无法获得正确的自动完成或代码整理,因为 VS Code 正在查看 Windows 版本的所有内容。在 Windows 和 Linux 上都必须复制开发环境,这完全违背了使用 WSL 的目的。

我们说服自己,我们需要的是一种方法,可以让 VS Code 在两个地方同时运行,在本地运行开发工具,并连接到一组在物理或虚拟机(例如容器或 VM)的上下文中远程运行的开发服务。这将为您提供在远程环境上下文中丰富的本地开发体验。

Visual Studio Code connecting to remote environments

介绍 VS Code 远程扩展

在过去的几个月里,我们一直在努力重新建立代码层之间的适当边界,并消除对本地开发环境的假设。我们为使用在 WSL、Docker 容器或通过 SSH 在物理和虚拟机中运行的远程工作区构建了三个新的扩展。

Visual Studio Code Remote Extensions for WSL, Containers, and SSH

WSL 扩展让您直接在 VS Code 中使用 Windows 子系统 for Linux (WSL) 作为完整的开发环境。这种新的优化支持让您

  • 使用 Windows 在基于 Linux 的环境中开发,使用平台特定的工具链和实用程序。
  • 编辑位于 WSL 或挂载的 Windows 文件系统(例如 /mnt/c)中的文件。
  • 在 Windows 上运行和调试基于 Linux 的应用程序。

命令和扩展直接在 Linux 发行版中运行,因此您不必担心路径问题、二进制兼容性或其他跨操作系统挑战。您可以在 WSL 中使用 VS Code,就像从 Windows 中使用一样。

观看这段简短的 2 分钟视频,了解在 WSL 中开发是多么容易。

有关更多信息,请参阅 在 WSL 中进行开发 文档。


远程 - SSH 扩展让您打开托管在任何远程机器、VM 或带有运行 SSH 服务器的容器上的文件夹或工作区。通过 SSH 进行开发让您

  • 在比您的本地机器更大、更快或更专业的硬件上进行开发。
  • 快速地在不同的远程开发环境之间切换,并安全地进行更新,而不用担心影响您的本地机器。
  • 调试运行在其他地方的应用程序,例如客户网站或云端。

例如,假设您正在进行一个深度学习项目。您通常需要一个 GPU 密集型虚拟机(例如 Azure 数据科学虚拟机),它配置了您需要使用大型数据集训练模型的所有工具和框架。

您可以通过 SSH 使用 Vim 或 Jupyter Notebook 编辑远程代码,但您会放弃本地开发工具的丰富性。相反,使用 远程 - SSH 扩展,您只需连接到 VM,安装必要的扩展,如 Python,然后您可以利用 VS Code 的所有强大功能,例如 IntelliSense(自动完成)、代码导航和调试,就像您在本地工作一样。

观看这段简短的 2 分钟视频,了解通过 SSH 在虚拟机上开发是多么容易。

有关更多信息,请参阅 使用 SSH 进行开发 文档。


开发容器 扩展让您使用 Docker 容器 作为您的 开发容器。容器是理想的开发环境,因为

  • 您可以使用一致且易于复制的工具链进行开发,该工具链与您部署到的操作系统相同。
  • 容器是隔离的,这意味着您可以在不同的开发环境之间快速切换,而不会影响您的本地机器。
  • 其他人可以轻松地为您的项目做出贡献,因为他们可以在一致的开发环境中轻松地进行开发、构建和测试。

可以使用 devcontainer.json 文件告诉 VS Code 如何配置开发容器,包括要使用的 Dockerfile、要打开的端口以及要在容器中安装的扩展。当 VS Code 在工作区中找到 devcontainer.json 时,它将自动构建(如有必要)映像、启动容器并连接到它。您的文件将被安装到容器中,因此您可以打开文件并开始编辑,并享受完整的 IntelliSense(自动完成)、代码导航、调试等功能。

观看这段 2 分钟的简短视频,了解开发容器的实际应用。

有关开发容器的更多信息,请参阅 在容器内开发 文档,以及包含您可以立即使用的示例的 vscode-remote-try-* 代码库

管理扩展

在远程开发时,VS Code 会尝试根据扩展公开的功能推断在本地或远程安装扩展的位置。扩展分为两类

  • UI 扩展在本地安装。这些扩展仅自定义 UI 并且不访问工作区中的文件,这意味着它们可以在本地机器上完全运行。由于它们在本地安装,因此无论您正在使用哪个工作区,它们始终可供您使用。UI 扩展的示例包括主题、代码片段、语言语法和键盘映射。

  • 工作区扩展在远程安装。它们访问工作区中的文件和文件夹以进行编辑,以提供 IntelliSense(自动完成)、转到定义、调试等功能。这些扩展可能自定义 UI。这些扩展在远程运行,以便它们可以完全访问远程主机上的文件系统和工具。

Remote and local extensions

大多数扩展都已更新并在远程环境中正常工作,但如果您遇到一些无法正常工作的扩展,请在该扩展上提交问题。

扩展作者

如果您正在创建 VS Code 扩展,我们已实现新的扩展 API,这些 API 能够感知远程。例如,扩展作者不应使用 open 包来加载浏览器窗口,而应使用 vscode.env.openExternal API,该 API 将在本地打开浏览器。类似地,有一个新的 clipboard 类,它将按预期将内容放置在本地剪贴板中。

更新的 API 文档 中提供了更多详细信息,包括如何在远程环境中运行、测试和调试您的扩展。

入门

感谢您的阅读!

以下是在 Visual Studio Code 远程开发中入门的三步快速指南

  1. 安装 Insiders 构建。在远程开发功能在稳定版中可用之前,您需要使用此版本。Insiders 构建每天都会发布最新的功能和错误修复。如果您担心稳定性,请不要担心!我们使用 Insiders 构建来开发 VS Code,它可以与稳定版并行安装,以防出现问题(并告知我们)。

  2. 获取 远程开发扩展包,该扩展包安装了对 WSL、SSH 和容器的支持,是入门的最佳方式。如果您不需要所有这些功能,可以卸载各个扩展。

  3. 阅读 文档。尝试使用 Dev Container 示例。如果您使用 Python 进行开发(很多人这样做!),请查看 Dan Taylor 的 有关远程 Python 开发的博客文章

最后,如果您遇到问题,请 提交问题。有关常见问题的答案,请参阅我们的 常见问题解答

请告诉我们您的想法!

祝您编码愉快!

来自 @code 团队