跳到主要內容
黯羽輕揚每天積累一點點

VS Code 遠端開發套件

免費2019-07-06#Tool#VSCode SSH#VSCode remote dev#Cloud VSCode#远程开发

還在 SSH + Vim?VS Code 都支持遠端開發了

一. 趨勢

伴隨著容器化、深度學習等技術的生產應用,越來越多的場景面臨「遠端」開發的問題,例如:

  • 伺服器

  • 虛擬機

  • 容器

這些遠端環境很難甚至不可能在本地重建一份,比如:

  • 特定配置:例如曾遇到的 .Net Framework 4.0 + MSSQL 2000,並且各自安裝了一堆特定版本補丁的歷史項目,幾乎無法還原其環境

  • 特定操作系統:例如在 Windows 下開發運行在 Linux 的項目

  • 對本地環境的破壞性太大:一些全局性的東西,很難都做到隔離

  • 依賴本地不具備的硬件能力:例如深度學習需要的計算及儲存能力

無論什麼原因,總會面臨本地與遠端環境差異帶來的各種不便

二. 現狀

對於遠端開發的場景,一般有 4 類解決方案:

  • 遠端桌面:開發體驗與本地環境差距較大,並且有些 Linux 發行版無法安裝遠端桌面

  • SSH + Vim:不如現代開發工具方便,影響生產力

  • 檔案同步工具:慢,而且容易出錯

  • 基於瀏覽器的工具:難以結合本地工具鏈使用

能夠解決一部分問題,但大多犧牲了本地開發環境的諸多便利

那麼,有沒有辦法從本地環境無縫切入遠端環境呢?既能享受本地熟悉的全套工具鏈帶來的便利,同時還能進行遠端開發呢?

當然有

三. 思路

從開發工具的角度來看,需要提供 3 方面的支持:

  • 支持 Windows 下開發 Linux

  • 支持 SSH 連接

  • 支持容器環境

對於 Windows 下開發 Linux 的問題,Win 10 在 2016 年已經提供了 Windows Subsystem for Linux (WSL),可以在 Windows 下直接(沒錯,不是虛擬機)運行一個 Linux 子系統:

[caption id="attachment_1972" align="alignnone" width="625"]WSL WSL[/caption]

WSL 提供了基本的文件共享支持,但開發工具(例如 VS Code)面臨的情況要更複雜一些:

If you have Python 2.7 and Flask installed on Windows (or none at all!) and Python 3.7 and Django installed in the Linux distro, you wouldn't get proper completions or linting because VS Code was looking at the Windows versions of everything.

開發工具需要明確區分不同環境,於是產生了一種很有意思的思路

We convinced ourselves that what we needed was a way to run VS Code in two places at once, to run the developer tools locally and connect to a set of development services running remotely in the context of a physical or virtual machine (for example, a container or VM).

簡言之,讓一部分(環境無關的)外掛運行在本地環境,另一些(環境相關的)外掛運行在遠端環境,比如容器、虛擬機、WSL、伺服器等等……

如此這般,一切問題都解決了,在支持遠端開發的同時兼顧了本地開發體驗:

This gives you a rich local development experience in the context of what is in the remote environment.

四. VS Code 遠端開發套件

VS Code 在 1.35 版本(2019/6/4)正式發布了 Remote Development 支持:

Remote Development (Preview) available in Stable - You can now use the Remote Development extensions in Stable.

並在最新 1.36 版本豐富了更多特性:

Remote Development (Preview) improvements - Save to local file system, drag and drop files to remotes, and more.

安裝 Remote Development 外掛包即可,目前(2019/7/6)外掛包裡提供了 3 個外掛:

Remote - SSH

透過 SSH 通道連接遠端機器、虛擬機或容器,繼而訪問其文件系統、管理終端、運行/調試應用,如下圖:

具體的,基於 SSH 的遠端開發支持讓我們:

  • 不必受限於本地環境的硬件條件

  • 能夠管理多套不同的遠端開發環境

  • 能夠遠端調試

應用運行在遠端,而開發調試都能在本地進行,繼續享受熟悉的本地完備工具鏈帶來的便利

P.S. 關於 SSH 遠端開發的更多細節,見:

Remote - Containers

更進一步地,容器支持允許將指定的 Docker 容器作為開發環境,進而:

  • 能夠保證工具鏈的一致性,並且依靠容器可以快速重建一整套工具鏈

  • 容器間有著天然的環境隔離,可以在不同的開發環境間切換而不影響本地環境

  • 能夠保證開發/構建/測試環境的一致性,便於協作

實現上,結構與 WSL 支持完全一致:

P.S. 關於 Docker 容器遠端開發的更多細節,見:

Remote - WSL

透過 Remote - WSL 外掛,可以將 WSL 用作整套開發環境,具體的,支持以下特性:

  • 用 Windows 在 Linux 環境中開發,而且可以使用平台相關的工具鏈

  • 編輯位於 WSL 的文件,包括掛載自 Windows 文件系統的那些(如 /mnt/c

  • 在 Windows 上調試運行 Linux 應用程序

P.S. 關於 WSL 遠端開發的更多細節,見:

五. 總結

就目前而言,能夠無縫切入遠端環境的 IDE,似乎要比雲 IDE 更實在一些:

Browser-based tools are useful in a variety of scenarios, but developers don't want to give up the richness and familiarity that desktop tools provide, or their existing locally installed tool chains.

參考資料

評論

暫無評論,快來發表你的看法吧

提交評論