使用提議的 API
在 Visual Studio Code,我們非常重視擴充套件 API 的相容性。我們盡最大努力避免破壞性 API 更改,擴充套件作者可以期望已釋出的擴充套件繼續工作。然而,這給我們帶來了很大的限制:一旦我們引入了一個 API,就不能輕易地更改它了。
提議的 API 為我們解決了這個問題。提議的 API 是一組不穩定的 API,它們在 VS Code 中實現,但不會像穩定的 API 那樣向公眾公開。它們可能會更改,僅在 Insiders 發行版中可用,並且不能用於已釋出的擴充套件。儘管如此,擴充套件作者可以在本地開發中測試這些新 API,並向 VS Code 團隊提供反饋,以便迭代 API。最終,提議的 API 會進入穩定的 API 並可供所有擴充套件使用。
使用提議的 API
以下是在本地擴充套件開發中測試提議的 API 的步驟
- 使用 VS Code 的Insiders版本。
- 在您的
package.json
中,新增"enabledApiProposals": ["<proposalName>"]
。 - 將相應的vscode.proposed.<proposalName>.d.ts檔案複製到您的專案源位置。
@vscode/dts CLI 實用程式允許您快速下載最新的vscode.proposed.<proposalName>.d.ts
以用於擴充套件開發。它根據您的package.json
檔案中列出的提議下載定義檔案。
> npx @vscode/dts dev
Downloading vscode.proposed.languageStatus.d.ts
To: /Users/Me/Code/MyExtension/vscode.proposed.languageStatus.d.ts
From: https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.languageStatus.d.ts
Read more about proposed API at: https://vscode.com.tw/api/advanced-topics/using-proposed-api
有一個使用提議 API 的示例:proposed-api-sample。
提議的 API 不相容性
在主分支上,vscode.proposed.<proposalName>.d.ts
始終與vscode.d.ts
相容。但是,當您將vscode.proposed.<proposal>.d.ts
新增到使用@types/vscode
的專案中時,最新的vscode.proposed.<proposal>.d.ts
可能與@types/vscode
中的版本不相容。
您可以透過以下兩種方式解決此問題
- 移除對
@types/vscode
的依賴,並使用npx @vscode/dts main
從microsoft/vscode
主分支下載vscode.d.ts
。 - 使用
@types/vscode@<version>
,並使用npx @vscode/dts dev <version>
從microsoft/vscode
的舊分支下載vscode.proposed.<proposal>.d.ts
。但是,請注意,API 可能在最新版本的 VS Code Insiders 中已更改。
共享使用提議 API 的擴充套件
雖然您無法在 Marketplace 上釋出使用提議 API 的擴充套件,但您仍然可以透過打包和共享您的擴充套件來與同行共享。
要打包您的擴充套件,您可以執行vsce package
來建立您的擴充套件的 VSIX 檔案。然後,您可以將此 VSIX 檔案共享給其他人,讓他們在 VS Code 中安裝該擴充套件。
要從 VSIX 檔案安裝擴充套件,您可以進入“擴充套件”檢視,選擇...省略號“檢視更多操作”按鈕,然後選擇“從 VSIX 安裝”。
選擇“從 VSIX 安裝”選單項的短影片如下所示。
對於使用提議 API 的擴充套件,還需要執行幾個步驟才能啟用您的擴充套件。從 VSIX 安裝後,您需要在專案資料夾中退出並從命令列使用code-insiders . --enable-proposed-api=<YOUR-EXTENSION-ID>
重新啟動 VS Code Insiders。
如果您希望將您的擴充套件設定為使用提議的 API,以便在每次啟動 VS Code Insiders 時都可用,您可以執行“首選項:配置執行時引數”命令來編輯.vscode-insiders/argv.json
檔案,以設定已啟用擴充套件的列表。
{
...
"enable-proposed-api": ["<YOUR-EXTENSION-ID>"]
}