- bounty将在6天后过期**。回答此问题可获得+50声望奖励。AdamRaichu希望引起更多人对此问题的关注:文档有问题吗?我的扩展坏了吗?为什么没有
export
和activate
它也能工作?
- bounty将在6天后过期**。回答此问题可获得+50声望奖励。AdamRaichu希望引起更多人对此问题的关注:文档有问题吗?我的扩展坏了吗?为什么没有
文档(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
。(我还通过重新加载几次进行了测试,结果相同:出现调试消息。)
1条答案
按热度按时间to94eoyn1#
扩展必须从其主模块导出activate()函数
仅适用于启动激活事件,该事件仅在以下情况下触发...
将在VS代码启动时激活。
您忽略的上下文是报价列在Start Up标题下,而不是Activation Events标题下。
这意味着您的扩展 * 不必 * 导出activate函数,除非您使用
*
activation事件,该事件侦听:多激活事件