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

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

从您的终端,使用 WSL 中的 code . 命令启动 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 应用程序,并且它已经到达了断点。在 Debug 控制台中,我输入了 process.platform 来显示 WSL 扩展如何将所有编辑器交互默认设置为 Linux 环境。要使此功能正常工作,无需任何配置,只需从 WSL 扩展连接到您的 WSL 环境即可开始工作。另外请注意,我的换行符默认设置为 LF(在状态栏中显示),无需设置任何额外的 Git 配置选项——如果您在 Windows 上从事开源工作,您会明白这对您来说有多重要。
我所有喜欢的扩展程序都能正常工作,并针对正确的环境。例如,Source Control 视图显示了使用安装在 WSL 2 中的 Git 版本对我的项目进行的更改,并且Docker 扩展已配置为访问 Docker Desktop WSL 2 技术预览版。
所有这些都得益于使用WSL 扩展。编辑、调试,甚至扩展程序,都像您期望的那样在您喜欢的编辑器中工作。
WSL 2 的优势
总结一下
- 虚拟机资源密集且体验非常孤立。
- 最初的 WSL 连接性很好,但与虚拟机相比性能非常差。
- WSL 2 采用混合方法,使用轻量级虚拟机,提供完全连接的体验和高性能。
再加上 Visual Studio Code 中的 WSL 扩展,您将拥有所有世界的最佳优势——Linux 和 Windows 兼容性,卓越的性能和无缝的开发体验。
进一步阅读
为了帮助您设置 VS Code 和 WSL,这里有一个在 WSL 中工作的教程。如果您想了解更多关于 VS Code Remote 以及它如何与 SSH 和 Docker 容器一起工作的信息,请参阅完整的 VS Code远程开发文档。
远程编码愉快!
Matt Hernandez,VS Code 项目经理 @fiveisprime