stu*_*art 5 visual-studio-code vscode-extensions
为什么VSCode Extension教程建议向订阅已注册的命令context.subscriptions?
到目前为止,我认为这似乎没有必要或无用。
let disposable = vscode.commands.registerCommand('extension.helloWorld', () => {
// The code you place here will be executed every time your command is executed
// Display a message box to the user
vscode.window.showInformationMessage('Hello World!');
});
context.subscriptions.push(disposable);
Run Code Online (Sandbox Code Playgroud)
但这本身似乎很好用:
vscode.commands.registerCommand('extension.helloWorld', () => {
vscode.window.showInformationMessage('Hello World!');
});
Run Code Online (Sandbox Code Playgroud)
另外,我尝试禁用在扩展名中添加和不添加其已注册命令的扩展名,context.subscriptions在两种情况下都禁用后,命令不可用。
所述VS代码API参考定义subscriptions为:
订阅:{dispose} []
可以添加一次性用品的阵列。停用此扩展后,将丢弃一次性用品。
这是否意味着如果不处理已注册的命令,那么即使关闭扩展名,它们的侦听器也会以某种方式徘徊?
TDLR-我是否应该订阅命令,为什么?
任何解释或见解将不胜感激!
Mat*_*ner 15
是的,您应该将命令添加到subscriptions. 订阅可确保在卸载扩展程序时正确注销您的命令。
vscode.commands.registerCommand返回一个一次性对象。处理返回的对象会取消注册命令,从而允许 VS Code 清理它可能拥有的任何内部状态/句柄。
简而言之,扩展程序创建的所有一次性对象都应该subscriptions以某种方式进入,以便在卸载扩展程序时可以正确清理它们。99% 的情况下,未能注册一次性工具可能不会对用户造成明显问题,但在用户启用和禁用您的扩展程序而没有重新启动 vscode 的情况下可能会导致问题
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |