在 Windows 環境中舒適的開發

WSL2

繼 WSL 1 後,Windows 決定直接在 Windows 中加入 Linux Kernel 提供更全面的開發環境相容,也能夠支援原本 WSL 1 無法支援的 syscall 像是 ptrace 等等,原理是使用 MS 自己的輕量虛擬技術,也就是 MS 自己管理了一顆 linux kernel 再跑,運行時會先吃掉一些 memory, 不使用時可以用 wsl --shutdown 關掉。更好的是不用開啟 HyperV Component 就能使用。

目前的 windows insider program 已經有 preview 版的 WSL2 可以使用,檔案系統速度提升有感,不過必須要是在 wsl2 的 rootfs 裡面,若存取 /mnt/ 速度反而會變慢

可以透過 \\wsl$\Ubuntu\home\ 或是直接在某個資料夾中執行 explorer.exe . 打開 windows 的 GUI 存取檔案,不得不說 windows 的 GUI 真的很棒棒

大致上用起來很順,不過因為是 preview 版本,目前還有待改進的如下:

  • 網路存取,目前必須用動態內網 IP 存取 WSL2 裡面跑的 service Ref
  • 曾經多次遇到運行 wsl 無法進入 /mnt mount 的資料夾,可能是 mount windows drive 失敗,目前可以透過重開 wsl --shutdown 來解決

VSCODE with Remote WSL

VSCODE 最新 stable 提供了 remote development 功能,原理是在遠端機器中跑一個 vscode remote server,而原本的 windows 端 VSCODE 變成主要提供 GUI 介面

這真的是 windows 開發者一大福音。

有許多 plugin 使用的 script engine 原本是要吃系統的,也就是說就算使用 wsl 也必須在 windows 安裝一份,同時也會遇到許多 windows 特有的 bug,使用 remote dev 把 vscode core 放進 wsl 後 extension 等會使用到額外 binary 的都可以直接跑在 linux 中

另外一個原本很大的問題是 debugger 再使用 terminal 跑 nodejs debugger mode 時會跟 integrated wsl terminal 衝突,無法直接跑起來,只能用 remote attach 暫時解決

支援 remote develop 後很多問題都解決了,目前還有遇到的問題像是 file list sync 有時會不靈敏等等,也比上面阻礙的問題小很多了