javascript 文档显示“exports.activate”,但我的扩展没有

ryevplcw  于 2023-01-01  发布在  Java
关注(0)|答案(1)|浏览(112)
    • bounty将在6天后过期**。回答此问题可获得+50声望奖励。AdamRaichu希望引起更多人对此问题的关注:文档有问题吗?我的扩展坏了吗?为什么没有exportactivate它也能工作?

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

    • 注意:扩展必须从其主模块导出activate()函数,并且当发出任何指定的激活事件时,VS代码仅调用该函数一次**。此外,扩展应该从其主模块导出deactivate()函数,以便在VS代码关闭时执行清理任务。如果清理过程是异步的,则扩展必须deactivate()返回Promise。如果清理过程是同步运行的,则扩展可以从deactivate()返回**undefined *。

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

  • 与常规扩展一样,扩展的activate/deactivate函数需要通过模式exports.activate = ...导出。
  • 然而,我已经写了4个web扩展,它们可以按预期工作而不导出激活函数。*(你可以在每个扩展的页面上看到here,源代码链接)。
    • 为什么不导出activate我的扩展就能正常工作?文档有错吗?不导出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,在其中添加了console.log消息到extension.js,并添加了*激活事件到我的包中,然后运行命令Developer: Install extension from loaction...并粘贴到this url中,我立即看到扩展被激活,并打开控制台,调试消息确实存在,这意味着扩展可以监听*而无需导出activate。(我还通过重新加载几次进行了测试,结果相同:出现调试消息。)

to94eoyn

to94eoyn1#

扩展必须从其主模块导出activate()函数
仅适用于启动激活事件,该事件仅在以下情况下触发...
将在VS代码启动时激活。
您忽略的上下文是报价列在Start Up标题下,而不是Activation Events标题下。
这意味着您的扩展 * 不必 * 导出activate函数,除非您使用* activation事件,该事件侦听:
多激活事件

相关问题