WSL 2 与 Visual Studio Code
2019 年 9 月 3 日,作者 Matt Hernandez,@fiveisprime
距离 适用于 Linux 的 Windows 子系统 2 (WSL 2) 的首次 Beta 发布已经过去几个月了,我想分享一下它的全部内容以及它将如何帮助你提高生产力。自从它进入 Windows 预览体验计划以来,我就一直在使用它的 Beta 版本,并且很快就完全切换到在日常开发任务中使用 WSL 2。
WSL 2 有哪些变化
第一个版本在 Windows 上原生实现了系统调用。系统调用本质上是内核提供的函数,这意味着只有已实现的调用才在 WSL 环境中受支持。如果你使用过早期版本的 WSL,并发现有些库和工具尝试访问尚未实现的系统调用(例如,Go 调试器),你可能已经注意到了这一点。虽然通过增量改进增加了对更多函数的支持,但 WSL 2 采取了完全不同的方法,它通过附带一个包含完整 Linux 内核的轻量级虚拟机来实现。
没错,WSL 2 现在附带一个虚拟机,但它并不是你可能期望的虚拟机体验。传统虚拟机启动可能很慢且感觉隔离,而 WSL 2 则与之前的版本一样无缝。它提供了 Windows 和 Linux 之间高度集成、极快的启动时间、极小的资源占用,并且完全无需虚拟机配置或管理。
所有这些都意味着 I/O 性能的提升——比 WSL 1 快达 20 倍——以及完整的系统调用能力。你的模块安装会更快,你的仓库克隆会更快,你喜欢的库也会可靠地工作。性能的提升意味着你还可以运行 Zsh 等备用 Shell,甚至使用你喜欢的 Node.js 版本管理工具。
WSL 2 与 Visual Studio Code
如果你正在跟随操作,请确保你已选择加入 Windows 预览体验计划版本并启用了 WSL 2。你可以在WSL 2 安装说明中了解更多关于如何开始的信息。
你还需要安装 Visual Studio Code 和 WSL 扩展。此外,还可以尝试测试版 Windows 终端,以获得 Windows 上最佳的终端体验。
通过启动 Windows 终端并创建新的 WSL 选项卡,或启动你安装的 Linux 发行版来打开 WSL。你也可以直接从命令提示符或 PowerShell 中通过在终端输入 wsl
来切换到 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 应用程序,它停在了一个断点处。在调试控制台中,我输入了 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 远程开发以及它如何通过 SSH 和在 Docker 容器中工作,请参阅完整的 VS Code 远程开发文档。
远程编码愉快!
Matt Hernandez,VS Code 项目经理 @fiveisprime