【问题标题】:Documentation says `exports.activate`, but my extensions work without文档说 `exports.activate`,但我的扩展没有
【发布时间】:2023-02-01 01:14:05
【问题描述】:

文档 (page 1) 说扩展需要 export function activate

笔记:一个扩展必须从它的主模块导出一个activate()函数,它将被调用只有一次当发出任何指定的激活事件时,由 VS Code 执行。还有一个扩展应该从其主模块导出一个 deactivate() 函数,以在 VS Code 关闭时执行清理任务。延期必须如果清理过程是异步的,则从 deactivate() 返回一个 Promise。扩展可能会返回不明确的来自 deactivate() 如果清理同步运行。

Web 扩展文档 (page 2) 说 Web 扩展应该使用 exports.activate

  • 与常规扩展一样,扩展的 activate/deactivate 函数需要通过模式 exports.activate = ... 导出。

但是,我已经编写了 4 个按预期工作的 Web 扩展没有导出激活函数。(您可以在here 看到它们,每个扩展的页面上都有源代码链接)。

为什么我的扩展程序在不导出 activate 的情况下工作?文档有错吗?如果不导出激活,我会失去什么吗?


我的代码被 webpack 从 index.js(如下)打包到 dist/main.js 中。

// package.json
{
...
  "main": "./dist/main.js",
  "browser": "./dist/main.js",
  "activationEvents": [
    "onCommand:zipViewer.extract",
    "onCommand:zipViewer.zip",
    "onCommand:zipViewer.openFileWithEditor",
    "onCustomEditor:zipViewer.ZipEdit"
  ],
...
}
// index.js
import cmds from "./cmds.js";
import ZipEdit from "./editor.js";

cmds.register();
ZipEdit.register();
// editor.js

// imports
// ...
export default class ZipEdit {
  static register() {
    return vscode.window.registerCustomEditorProvider(ZipEdit.viewType, new ZipEdit());
  }

  static viewType = "zipViewer.ZipEdit";
// ...
// cmds.js

export default class cmds {
  static register() {
    vscode.commands.registerCommand("zipViewer.extract", function () {
    // Registers all commands in this way...

2022 年 12 月 31 日更新

我创建了一个分支test(更名为 1/31/23)我在其中向 extension.js 添加了一条 console.log 消息,并将 * 激活事件添加到我的包中。然后我运行命令 Developer: Install extension from loaction... 并粘贴到 this url 中。我立即看到扩展被激活,并打开了控制台。调试消息确实存在,这意味着扩展可以在不导出 activate 的情况下侦听 *。 (我还通过重新加载几次进行了测试,结果相同:存在调试消息。)还使用 * 作为唯一的激活事件进行了测试。

【问题讨论】:

  • 如果没有激活函数,你怎么知道什么时候初始化你的扩展?你什么时候注册你的提供者等?
  • 在 package.json 指定为入口点的文件中调用 registerCommand 等方法。

标签: javascript vscode-extensions


【解决方案1】:

扩展必须从其主模块导出 activate() 函数

仅适用于Start Up激活事件,仅在...时触发

每当 VS Code 启动时都会被激活。

您缺少的上下文是引用列在 Start Up 标头下,而不是 Activation Events 标头下。

意味着你的扩展没有导出激活函数,除非您使用 * 激活事件,它监听:

多次激活事件

【讨论】:

  • 谢谢!这确实是我所缺少的作品。
  • @AdamRaichu 要对此进行测试,请将您的 activationEvent 更改为 * ,如果没有 exports.activate ,您的扩展程序是否仍然有效?
  • 请参阅编辑问题。它做了 :/
  • @AdamRaichu 您是否尝试将 * 作为唯一的激活事件?
  • 不,我现在就试试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
  • 2015-10-16
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多