WSL 2 与 Visual Studio Code
2019年9月3日,作者:Matt Hernandez,@fiveisprime
距离 适用于 Linux 的 Windows 子系统 2 (WSL 2) 的首次 Beta 版发布已经过去几个月了,我想分享一些关于它是什么、以及它将如何帮助您提高工作效率的信息。我从它登陆 Windows Insider 以来一直在使用这个 Beta 版,并且我很快就完全切换到在日常开发任务中使用 WSL 2。
WSL 2 中的变化
第一个版本在 Windows 上原生实现了系统调用。系统调用本质上是内核提供的函数,这意味着 WSL 环境中只支持已实现的调用。如果您使用过早期版本的 WSL,并且发现库和工具试图访问尚未实现的系统调用(例如,Go 调试器),您可能已经注意到这一点。虽然通过增量改进增加了对更多函数的支持,但 WSL 2 采用了一种完全不同的方法,通过提供一个带有完整 Linux 内核的轻量级虚拟机来解决这个问题。
没错,WSL 2 现在提供了一个虚拟机,但它不是您可能期望的虚拟机体验。传统的虚拟机启动可能很慢并且感觉孤立,而 WSL 2 与以前的版本一样无缝。期待 Windows 和 Linux 之间高度集成、极快的启动时间、小的资源占用,并且完全无需虚拟机配置或管理。
所有这些都转化为更高的 IO 性能——比 WSL 1 快达 20 倍——以及完整的系统调用能力。您的模块将安装得更快,您的仓库将克隆得更快,并且您最喜欢的库将可靠地工作。性能的提升意味着您还可以运行替代的 shell,例如 Zsh,甚至可以使用您最喜欢的 Node.js 版本管理工具。
WSL 2 和 Visual Studio Code
如果您正在按照说明操作,请确保您已选择加入 Windows Insider 版本并启用了 WSL 2。您可以在 WSL 2 安装说明 中了解如何开始使用。
您还需要安装 Visual Studio Code 和 WSL 扩展。此外,还可以查看 Beta 版 Windows 终端,以获得 Windows 上最佳的终端体验。

通过启动 Windows 终端并创建新的 WSL 选项卡,或者通过启动您安装的 Linux 发行版来打开 WSL。您还可以通过在终端中输入 wsl 直接从命令提示符或 PowerShell 切换到 Linux——这只是 WSL 深度集成到 Windows 中的众多方式之一。您还可以使用 WSL 内联做一些离谱的事情,例如……

在您的终端中,使用 code . 从 WSL 启动 Visual Studio Code。您甚至可以使用 wsl code . 内联切换到 Linux,启动 VS Code,然后返回到您的 Windows shell。😏
就我个人而言,我在 Windows 上 100% 的开发工作都使用 WSL 2——所有开发工具,如 Git 和 Node.js 都安装在我的 Linux 环境中。查看这篇 技巧和窍门文章,了解更多关于在 WSL 中定制 VS Code 以满足您需求的信息。
这是我的设置。

请注意截图中,我已连接到我的 WSL 2 实例(左下角显示“Ubuntu-18.04”作为远程源),并且我已从调试器启动了一个 Node.js 应用程序并设置了一个断点。在调试控制台中,我输入了 process.platform 以显示 WSL 扩展如何将所有编辑器交互默认设置为 Linux 环境。无需任何配置即可使其工作,只需从 WSL 扩展连接到您的 WSL 环境并开始工作。还要注意,我的行尾默认设置为 LF(显示在状态栏中),而无需设置任何额外的 Git 配置选项——如果您在 Windows 上从事开源工作,您就会明白这有多重要。
我所有喜欢的扩展都正常工作,并且都针对正确的环境。例如,“源代码管理”视图正在使用安装在 WSL 2 中的 Git 版本显示我对项目的更改,并且 Docker 扩展已配置 为访问 Docker Desktop WSL 2 技术预览版。
所有这些都是通过使用 WSL 扩展 实现的。编辑、调试,甚至扩展都以您在自己喜欢的编辑器中期望的方式工作。
WSL 2 的优势
总结
- 虚拟机占用大量资源并造成非常脱节的体验。
- 原始的 WSL 连接性很好,但与虚拟机相比性能相当差。
- WSL 2 带来了一种混合方法,具有轻量级虚拟机、完全连接的体验和高性能。
再加上 Visual Studio Code 中的 WSL 扩展,您将拥有两全其美的体验——Linux 和 Windows 工具兼容性、卓越的性能以及无缝的开发体验。
进一步阅读
为了帮助您使用 WSL 设置 VS Code,有一个 WSL 工作教程。如果您想了解更多关于 VS Code Remote 以及它如何通过 SSH 和在 Docker 容器中工作,请参阅完整的 VS Code 远程开发文档。
远程编码愉快!
Matt Hernandez,VS Code 项目经理 @fiveisprime