使用 VS Code 進行遠端開發
2019 年 5 月 2 日,VS Code 團隊,@code
總結
今天,我們很高興宣佈推出 Visual Studio Code 的三個新擴充套件預覽版,這些擴充套件可實現容器中的無縫開發,在物理或虛擬機器上進行遠端開發,以及使用 適用於 Linux 的 Windows 子系統 (WSL) 進行開發。您可以透過安裝 遠端開發擴充套件包 立即開始使用。
注意:目前您需要使用 Insiders 版本,但遠端開發支援最終將在 Stable 版本中提供。
繼續閱讀以瞭解我們是如何走到這一步的。
開發趨勢
隨著 VS Code 越來越受歡迎,我們有幸與越來越多的擁有不同開發環境(許多與我們自己的環境截然不同)的使用者進行了交談,以試圖找出我們可以推動 VS Code 發展以解決真正開發人員痛點的方法。
在這些對話中出現了一個有趣的模式。我們看到許多開發人員試圖使用 VS Code 來針對配置了特定開發和執行時堆疊的容器和遠端 VM 進行開發,僅僅是因為在本地設定這些開發環境太困難、太具有破壞性,在某些情況下甚至是不可能的。
我們都經歷過這個問題。除非我們覺得是時候格式化那臺機器了:D,否則我們都會猶豫是否要嘗試 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(完成)、linting 和除錯,才能在這些環境中工作。
一種不同的方法
聽到這些挑戰後,我們開始研究 WSL 支援,它看起來很簡單。安裝 VS Code 並(當時要小心!)像往常一樣編輯 Windows 檔案系統。我們確實努力為 Node.js 啟用遠端除錯,我們認為我們可以簡單地安裝一個小指令碼來啟用從 bash shell 啟動 code。
但是,這並不正確。為每個執行時做特殊工作是沒有意義的,就像我們為 Node.js 除錯所做的那樣。如果您在 Windows 上安裝了 Python 2.7 和 Flask(或者根本沒有安裝!)並在 Linux 發行版中安裝了 Python 3.7 和 Django,您將無法獲得適當的完成或 linting,因為 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 擴充套件允許您開啟託管在任何遠端機器、VM 或具有執行 SSH 伺服器的容器上的資料夾或工作區。透過 SSH 進行開發允許您
- 在比本地機器更大、更快或更專業的硬體上開發。
- 在不同的遠端開發環境之間快速切換,並安全地進行更新,而不必擔心影響本地機器。
- 除錯在其他地方執行的應用程式,例如客戶站點或雲端。
例如,假設您正在從事深度學習專案。您通常需要一個 GPU 密集的虛擬機器(例如 Azure 資料科學虛擬機器),配置了訓練模型所需的所有工具和框架以及大型資料集。
您可以使用 SSH 上的 Vim 或 Jupyter Notebooks 編輯遠端程式碼,但您放棄了本地開發工具的豐富性。相反,使用 Remote - SSH 擴充套件,您只需連線到 VM,安裝必要的擴充套件(例如 Python),然後就可以利用 VS Code 的所有強大功能,例如 IntelliSense(完成)、程式碼導航和除錯,就像在本地工作一樣。
觀看這個快速的 2 分鐘影片,瞭解透過 SSH 在虛擬機器上開發有多容易。
有關更多資訊,請參閱使用 SSH 進行開發文件。
Dev Containers 擴充套件允許您使用 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。例如,擴充套件作者應該使用 vscode.env.openExternal API,而不是使用 open 包載入瀏覽器視窗,該 API 將在本地開啟瀏覽器。同樣,還有一個新的 clipboard 類,它將內容放在本地剪貼簿上,如預期。
可以在更新的API 文件中找到更多詳細資訊,包括如何在遠端環境中執行、測試和除錯擴充套件。
開始使用
感謝您閱讀到這裡!
以下是開始進行 Visual Studio Code 遠端開發的 3 個快速步驟
-
安裝 Insiders 版本。在遠端開發功能在 Stable 版本中可用之前,您需要使用它。Insiders 版本每天釋出最新功能和錯誤修復。如果您擔心穩定性,請不要擔心!我們使用 Insiders 版本來開發 VS Code,它可以與 Stable 版本並排安裝,以防萬一出現問題(並告知我們)。
-
獲取 遠端開發擴充套件包,它安裝了對 WSL、SSH 和容器的支援,是開始使用的最簡單方法。如果您不需要所有這些擴充套件,可以解除安裝單個擴充套件。
-
閱讀文件。嘗試開發容器示例。如果您使用 Python 進行開發(很多人都這樣做!),請檢視 Dan Taylor 關於遠端 Python 開發的部落格文章。
最後,如果您遇到問題,請提交問題。有關常見問題的解答,請參閱我們的 常見問題解答。
讓我們知道你的想法!
程式設計愉快,
@code 團隊

