【发布时间】: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