VS代码API:如何在extension.ts之外检索ExtensionContext



我使用VS Code API的ExtensionContext.globalState((来计算我们的扩展的侧边栏被打开的次数。这在一个扩展名为.ts的命令-处理程序中,它按预期计算在本地存储上打开的次数。

我想在一个.js文件中检索这个计数,我们正在使用JQuery将组件附加到侧边栏的UI中。然而,我不知道如何检索ExtensionContext.globalState而不是extension.ts

这就是我获取和更新分机.ts 计数值的方式

const retrievedOpeningCountValue = context.globalState.get<Number>("sidebarOpeningCount");
// If show hasn't been called yet, retrieve 0, then increase it to 1 to store such value
let retrievedValue = retrievedOpeningCountValue?.valueOf() || 0;
let increasedValue = retrievedValue + 1;
context.globalState.update("sidebarOpeningCount", increasedValue);

然后我需要在我的JQuery文件中检索这个数字。我不能做import * as vscode from "vscode";,因为它不是TS文件。即使是,context: vscode.ExtensionContext也只能作为参数传递给扩展.ts上的激活函数。

但基本上,我想在js文件上做一些类似const retrievedOpeningCountValue = context.globalState.get<Number>("sidebarOpeningCount");的事情。我该怎么做?

您可以简单地将context分配给某个全局/共享资源,并将其导入任何其他.js/.ts文件。

类似于:

扩展.ts

export async function activate(context: vscode.ExtensionContext) {
Container.context = context;

container.ts

import { ExtensionContext } from "vscode";
export class Container {
private static _extContext: ExtensionContext;

public static get context(): ExtensionContext {
return this._extContext;
}

public static set context(ec: ExtensionContext) {
this._extContext = ec;
}
}

您的其他文件.ts

import { Container } from "../container";
...
const retrievedOpeningCountValue = Container.context.globalState.get<Number>("sidebarOpeningCount");

最新更新