使用 VS Code 進行遠端開發
2019 年 5 月 2 日,由 VS Code 團隊,@code 撰寫
TL;DR (太長;沒看)
今天,我們很高興宣布推出三款適用於 Visual Studio Code 的全新擴充功能預覽版,這些擴充功能可在 容器中、實體或虛擬機器上的遠端以及 適用於 Linux 的 Windows 子系統 (WSL) 中實現無縫開發。您可以立即安裝 遠端開發擴充功能套件 來開始使用。
注意:您現在需要使用 Insiders 組建,但遠端開發支援最終將在穩定版本中提供。
請繼續閱讀以了解我們如何走到這一步。
開發趨勢
隨著 VS Code 的普及,我們有幸且有機會與更多具有不同開發環境的使用者交談,其中許多環境與我們自己的環境截然不同,目的是嘗試找出我們可以推動 VS Code 進步的方法,以解決開發人員的實際痛點。
在這些對話中出現了一個有趣的模式。我們看到許多開發人員嘗試使用 VS Code 對容器和遠端 VM 進行開發,這些容器和遠端 VM 配置了特定的開發和執行階段堆疊,僅僅是因為設定這些本機開發環境太困難、太具破壞性,在某些情況下甚至是不可能的。
我們都經歷過這個問題。除非我們覺得是時候清理機器了 :),否則我們會猶豫是否要嘗試 Rust、Go、Node 或 Python3 等新的堆疊,因為擔心「搞亂」我們目前調整良好的環境。
Python 開發人員想要切換到 VS Code,但無法切換,因為他們需要使用 容器和虛擬機器 作為針對特定 Python 堆疊配置的開發環境。
由於程式碼庫非常龐大,我們看到像 Facebook (和 Microsoft!) 這樣的公司中的工程師使用像 vim 這樣的編輯器,針對安全且功能強大的「開發人員 VM」進行遠端工作,並使用替代的雲端式搜尋和導航服務,這些服務的規模甚至超出了最好的筆記型電腦所能處理的範圍。
資料科學家建立和訓練資料模型通常需要大量的儲存和運算服務,以分析即使在強大的桌上型電腦上都無法儲存或處理的大型資料集。
適用於 Linux 的 Windows 子系統 (WSL) 的普及,部分原因是它讓設定包含目標作業系統的獨立開發環境變得容易。事實上,VS Code 儲存庫中評論第三多的問題 是支援從 Windows 上 Linux 發行版的 Bash 終端機執行 code
。
目前解決方案的挑戰
在這些對話中,我們也不斷聽到開發人員在這種開發類型中面臨的相同挑戰。
-
遠端桌面可以運作,但在某些 Linux 發行版上很難或不可能設定,而且開發體驗可能會「延遲」。
-
SSH 和 Vim (或具有檔案同步功能的本機工具) 可以運作,但它們可能很慢、容易出錯,而且通常缺乏現代開發工具的生產力。
-
瀏覽器型工具在各種情況下都很有用,但開發人員不想放棄桌上型工具提供的豐富性和熟悉度,也不想放棄他們現有的本機安裝工具鏈。
更糟的是 (我們認為!) 開發人員必須犧牲核心 VS Code 體驗,例如 IntelliSense (完成)、程式碼檢查和偵錯,才能針對這些環境工作。
不同的方法
在聽到這些挑戰後,我們開始研究 WSL 支援,它看起來非常簡單。安裝 VS Code 並 (當時要小心!) 像平常一樣編輯 Windows 檔案系統。我們確實努力為 Node.js 啟用遠端偵錯,並且我們認為我們可以簡單地安裝一個小腳本來啟用從 bash shell 啟動 code
。
但是,這就是不對勁。為每個執行階段做特殊工作是沒有意義的,就像我們為 Node.js 偵錯所做的那樣。如果您在 Windows 上安裝了 Python 2.7 和 Flask (或根本沒有安裝!),並且在 Linux 發行版中安裝了 Python 3.7 和 Django,您將無法獲得適當的完成或程式碼檢查,因為 VS Code 正在查看所有內容的 Windows 版本。必須在 Windows 和 Linux 上複製開發環境,這就失去了擁有 WSL 的目的。
我們說服自己,我們需要的是一種同時在兩個位置執行 VS Code 的方法,在本機執行開發人員工具,並連線到一組在實體或虛擬機器 (例如,容器或 VM) 環境中遠端執行的開發服務。這讓您在遠端環境的上下文中獲得豐富的本機開發體驗。
介紹 VS Code 遠端擴充功能
在過去的幾個月中,我們一直努力重新建立程式碼層之間的適當界限,並消除對本機開發環境的假設。我們建立了三個新的擴充功能,用於在 WSL、Docker 容器或透過 SSH 在實體和虛擬機器中執行的遠端工作區上工作。
WSL 擴充功能可讓您直接從 VS Code 使用 適用於 Linux 的 Windows 子系統 (WSL) 作為完整的開發環境。這種新的最佳化支援可讓您
- 使用 Windows 在以 Linux 為基礎的環境中開發,使用特定於平台的工具鏈和公用程式。
- 編輯位於 WSL 或已掛載的 Windows 檔案系統 (例如
/mnt/c
) 中的檔案。 - 在 Windows 上執行和偵錯您的 Linux 基礎應用程式。
命令和擴充功能直接在 Linux 發行版中執行,因此您不必擔心路徑問題、二進位相容性或其他跨作業系統挑戰。您能夠像從 Windows 中一樣在 WSL 中使用 VS Code。
觀看這段 2 分鐘的快速影片,了解在 WSL 中開發有多麼容易。
如需更多資訊,請參閱 在 WSL 中開發 文件。
Remote - SSH 擴充功能可讓您開啟託管在任何執行 SSH 伺服器的遠端機器、VM 或容器上的資料夾或工作區。透過 SSH 進行開發可讓您
- 在比本機機器更大、更快或更專業的硬體上進行開發。
- 在不同的遠端開發環境之間快速切換,並安全地進行更新,而無需擔心影響您的本機機器。
- 偵錯在其他地方執行的應用程式,例如客戶站點或雲端中。
例如,假設您正在處理深度學習專案。您通常需要一個 GPU 密集型虛擬機器 (例如 Azure 資料科學虛擬機器),其中配置了您需要的所有工具和架構,以使用大規模資料集訓練您的模型。
您可以使用 SSH 或 Jupyter Notebooks 上的 Vim 來編輯您的遠端程式碼,但您放棄了本機開發工具的豐富性。相反,透過 Remote - SSH 擴充功能,您只需連線到 VM,安裝必要的擴充功能,例如 Python,然後您就可以利用 VS Code 的所有強大功能,例如 IntelliSense (完成)、程式碼導航和偵錯,就好像您在本機工作一樣。
觀看這段 2 分鐘的快速影片,了解透過 SSH 在虛擬機器上開發有多麼容易。
如需更多資訊,請參閱 使用 SSH 進行開發 文件。
開發容器擴充功能可讓您使用 Docker 容器 作為您的開發容器。容器是出色的開發環境,因為
- 您可以使用一致且易於重現的工具鏈進行開發,並在您要部署到的相同作業系統上進行開發。
- 容器是隔離的,這表示您可以在不同的開發環境之間快速切換,而不會影響您的本機機器。
- 其他人可以輕鬆地為您的專案做出貢獻,因為他們可以輕鬆地在一致的開發環境中進行開發、建置和測試。
devcontainer.json
檔案可用於告知 VS Code 如何配置開發容器,包括要使用的 Dockerfile
、要開啟的連接埠以及要在容器中安裝的擴充功能。當 VS Code 在工作區中找到 devcontainer.json
時,它會自動建置 (如果需要) 映像、啟動容器並連線到它。您的檔案會掛載到容器中,因此您可以開啟檔案並開始編輯,並具有完整的 IntelliSense (完成)、程式碼導航、偵錯等功能。
觀看這段 2 分鐘的快速影片,了解開發容器的實際運作情況。
如需有關開發容器的更多資訊,請參閱 在容器內開發 文件,以及包含您今天可以使用的範例的 vscode-remote-try-* 儲存庫。
管理擴充功能
遠端開發時,VS Code 會嘗試根據擴充功能公開的功能來推斷將擴充功能安裝在本機還是遠端。擴充功能分為兩類
-
UI 擴充功能安裝在本機。這些擴充功能僅自訂 UI,並且不存取工作區中的檔案,這表示它們可以完全在本機機器上執行。由於它們安裝在本機,因此無論您在哪個工作區中工作,它們始終可供您使用。UI 擴充功能的範例包括佈景主題、程式碼片段、語言文法和鍵盤對應。
-
工作區擴充功能安裝在遠端。它們存取工作區中的檔案和資料夾以進行編輯,以提供 IntelliSense (完成)、跳到定義、偵錯等功能。這些擴充功能可能會自訂 UI。這些擴充功能在遠端執行,以便它們可以完全存取遠端主機上的檔案系統和工具。
大多數擴充功能都已更新,並且可以在遠端環境中正常運作,但是如果您遇到某些無法運作的擴充功能,請在擴充功能上提交問題。
擴充功能作者
如果您正在建立 VS Code 擴充功能,我們已實作了新的擴充功能 API,這些 API 可感知遠端。例如,擴充功能作者應使用 vscode.env.openExternal
API 而不是使用 open
套件來載入瀏覽器視窗,這將在本機開啟瀏覽器。同樣地,有一個新的 clipboard
類別,它會將內容放在本機剪貼簿上,正如預期的那樣。
更多詳細資訊可以在更新後的 API 文件中找到,包括如何在遠端環境中執行、測試和偵錯您的擴充功能。
開始使用
感謝您閱讀到這裡!
以下是開始進行 Visual Studio Code 遠端開發的 3 個快速步驟
-
安裝 Insiders 組建。在遠端開發在穩定版本中可用之前,您需要使用此組建。Insiders 組建每天都會發布最新的功能和錯誤修正。如果您擔心穩定性,請不要擔心!我們使用 Insiders 組建來開發 VS Code,並且它可以與穩定版本並排安裝,以防發生任何問題 (並告知我們)。
-
取得 遠端開發擴充功能套件,其中安裝了對 WSL、SSH 和容器的支援,這是開始使用的最簡單方法。如果您不需要全部支援,可以解除安裝個別的擴充功能。
-
閱讀 文件。試用 開發容器範例。如果您使用 Python 開發 (你們很多人都這樣做!),請查看 Dan Taylor 關於在 Visual Studio Code 中進行遠端 Python 開發的部落格文章。
最後,如果您遇到問題,請提交問題。如需常見問題的解答,請參閱我們的常見問題。
請告訴我們您的想法!
Happy Coding,
@code 團隊