– 代理会话日,2月19日

使用提议的 API

在 Visual Studio Code 中,我们非常重视扩展 API 的兼容性。我们尽最大努力避免破坏性的 API 变更,并且扩展作者可以预期已发布的扩展将继续工作。然而,这给我们带来了很大的限制:一旦我们引入一个 API,就很难再对其进行更改。

提议的 API 解决了这个问题。提议的 API 是一组不稳定 API,它们在 VS Code 中实现,但未像稳定的 API 那样公开给公众。它们可能发生变化仅在 Insiders 分发版中可用,并且不能在已发布的扩展中使用。尽管如此,扩展作者可以在本地开发中测试这些新的 API,并为 VS Code 团队提供反馈,以便迭代 API。最终,提议的 API 会进入稳定的 API,并可供所有扩展使用。

使用提议的 API

以下是在本地扩展开发中测试提议的 API 的步骤

@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.js.cn/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 mainmicrosoft/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 安装 菜单项的过程。

Demo showing a user going into the Extensions view to find the Install from VSIX menu item

对于使用提议的 API 的扩展,启用您的扩展还需要几个额外的步骤。从 VSIX 安装后,您需要退出并从命令行重新启动 VS Code Insiders,使用 code-insiders . --enable-proposed-api=<YOUR-EXTENSION-ID> 在您的项目文件夹中。

如果您希望在每次启动 VS Code Insiders 时都能使用使用提议的 API 的扩展,您可以运行 首选项:配置运行时参数 命令来编辑 .vscode-insiders/argv.json 文件,以设置已启用扩展的列表。

{
    ...
    "enable-proposed-api": ["<YOUR-EXTENSION-ID>"]
}
© . This site is unofficial and not affiliated with Microsoft.