使用 VS Code 進行遠端開發
2019 年 5 月 2 日,由 VS Code 團隊釋出,@code
內容提要
今天,我們激動地宣佈,Visual Studio Code 的三款新擴充套件程式已釋出預覽版。它們可以在容器中、物理或虛擬機器上,以及在適用於 Linux 的 Windows 子系統 (WSL) 中實現無縫的遠端開發。你可以透過安裝遠端開發擴充套件包立即開始。
注意:目前你需要使用 Insiders 版本,但遠端開發支援最終將在穩定版中提供。
請繼續閱讀,瞭解我們是如何做到這一點的。
開發趨勢
隨著 VS Code 越來越受歡迎,我們有幸和機會與越來越多使用不同開發環境的使用者進行交流,其中許多環境與我們自己的截然不同。我們試圖找出可以推動 VS Code 前進、解決開發者實際痛點的方法。
在這些對話中,一個有趣的模式浮現出來。我們看到許多開發者試圖使用 VS Code 針對配置了特定開發和執行時堆疊的容器及遠端虛擬機器進行開發,僅僅是因為在本地設定這些開發環境太困難、太具破壞性,在某些情況下甚至是不可能的。
我們都經歷過這個問題。除非我們覺得是時候重灌系統了 :),否則我們會猶豫是否要嘗試一個新的技術棧,比如 Rust、Go、Node 或 Python3,因為擔心會“搞亂”我們當前經過精心調校的環境。
Python 開發者想切換到 VS Code,但因為需要使用配置了特定 Python 堆疊的容器和虛擬機器作為開發環境而無法實現。
由於程式碼庫非常龐大,我們看到像 Facebook(以及微軟!)這樣的公司的工程師使用像 vim 這樣的編輯器,在安全而強大的“開發虛擬機器”上進行遠端工作,並使用可替代的、基於雲的搜尋和導航服務,其擴充套件能力超出了最好的筆記型電腦所能處理的範圍。
資料科學家在構建和訓練資料模型時,通常需要大規模的儲存和計算服務來分析大型資料集,這些資料集即使在強大的桌上型電腦上也無法儲存或處理。
適用於 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 同時在兩個地方執行的方法,即在本地執行開發工具,同時連線到在一臺物理或虛擬機器(例如,一個容器或虛擬機器)的上下文中遠端執行的一套開發服務。這能讓您在遠端環境的上下文中獲得豐富的本地開發體驗。
介紹 VS Code 遠端擴充套件
在過去的幾個月裡,我們一直在努力重新明確我們的程式碼層之間的界限,並消除對本地開發環境的假設。我們已經構建了三個新的擴充套件,用於處理在 WSL、Docker 容器中,或透過 SSH 在物理和虛擬機器上執行的遠端工作區。
WSL 擴充套件讓你可以直接在 VS Code 中,將適用於 Linux 的 Windows 子系統 (WSL) 作為一個完整的開發環境來使用。這種全新的、經過最佳化的支援讓你能夠:
- 在 Windows 上使用特定平臺的工具鏈和實用程式,在基於 Linux 的環境中進行開發。
- 編輯位於 WSL 或掛載的 Windows 檔案系統中的檔案(例如
/mnt/c
)。 - 在 Windows 上執行和除錯你基於 Linux 的應用程式。
命令和擴充套件直接在 Linux 發行版中執行,因此你不必擔心路徑問題、二進位制相容性或其他跨作業系統的挑戰。你可以在 WSL 中使用 VS Code,就像在 Windows 上一樣。
觀看這個簡短的 2 分鐘影片,瞭解在 WSL 中進行開發是多麼容易。
更多資訊,請參閱在 WSL 中開發的文件。
Remote - SSH 擴充套件讓你可以在任何執行著 SSH 伺服器的遠端機器、虛擬機器或容器上開啟資料夾或工作區。透過 SSH 進行開發,你可以:
- 在比你本地機器更大、更快或更專業的硬體上進行開發。
- 在不同的遠端開發環境之間快速切換,並安全地進行更新,而不必擔心影響你的本地機器。
- 除錯一個在別處執行的應用程式,例如在客戶現場或雲端。
例如,假設你正在進行一個深度學習專案。你通常需要一臺配備強大 GPU 的虛擬機器(例如 Azure 資料科學虛擬機器),並配置好所有你需要的工具和框架,以便用大規模資料集來訓練你的模型。
你可以透過 SSH 使用 Vim 或 Jupyter Notebooks 來編輯你的遠端程式碼,但這樣你就放棄了本地開發工具的豐富功能。相反,使用 Remote - SSH 擴充套件,你只需連線到該虛擬機器,安裝必要的擴充套件如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。這些擴充套件在遠端執行,以便它們能夠完全訪問遠端主機上的檔案系統和工具。
大多數擴充套件已經更新,並且能在遠端環境中正常工作,但如果你遇到某些不正常的擴充套件,請提交一個 issue 給該擴充套件。
擴充套件開發者
如果你正在建立 VS Code 擴充套件,我們已經實現了支援遠端的新擴充套件 API。例如,擴充套件開發者不應使用 open
包來載入瀏覽器視窗,而應使用 vscode.env.openExternal
API,這將在本地開啟瀏覽器。類似地,還有一個新的 clipboard
類,它會按預期將內容放入本地剪貼簿。
更多細節可以在更新後的API 文件中找到,包括如何在遠端環境中執行、測試和除錯你的擴充套件。
開始使用
感謝你閱讀到這裡!
以下是開始進行 Visual Studio Code 遠端開發的 3 個快捷步驟:
-
安裝 Insiders 版本。在遠端開發功能進入穩定版之前,你需要使用此版本。Insiders 版本每日釋出,包含最新的功能和錯誤修復。如果你擔心穩定性,不必擔心!我們使用 Insiders 版本來開發 VS Code,並且它可以與穩定版並排安裝,以防萬一出現問題(請告訴我們)。
-
獲取遠端開發擴充套件包,它會安裝對 WSL、SSH 和容器的支援,是開始使用的最簡單方式。如果你不需要全部,可以解除安裝單個擴充套件。
-
閱讀文件。嘗試開發容器示例。如果你使用 Python 進行開發(你們中的許多人都這樣做!),請檢視 Dan Taylor 關於遠端 Python 開發的部落格文章。
最後,如果你遇到問題,請提交一個 issue。有關常見問題的答案,請參閱我們的常見問題解答。
讓我們知道你的想法!
程式設計愉快,
@code 團隊