开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第24天,点击查看活动详情
package.json
对插件的详细描述,我们先关注以下的字段:
{
"name": "test-plugin",
"main": "./out/extension.js",
"activationEvents":["*"],
"contributes":{
"commands":[
{
"command": "test-plugin.helloWorld",
"title": "Hello World"
}
]
}
// ...
}
name:插件的名字main:入口地址commands:插件所有可以使用的命令command:当触发命令时,发送的消息名字,格式为{name}.{cmd}title:命令的标题,我们输入命令的时候就是以这个字段为准。
activationEvents:激活可用的事件列表,格式为:{event}:{value}。
activationEvents
设置激活插件的事件,当插件激活时会调用入口的activate函数,插件默认是没有激活的。
vscode提供了非常多的事件类型,比如onLanguage、onCommand,onView等。
拿command举例,需要按照这样的格式书写
"activationEvents": [
"onCommand:test-plugin.helloWorld"
],
其中command为contributes.commands中的某一项值。
当使用命令模式,输入Hello World,触发command的时候,插件就会激活。
注意事项
如果未声明在activationEvents中的命令被触发,就会出现一下警告:
这个警告让初为新手的我困惑了好长时间,算是一个注意点。
如果不想过滤任何事件,可以暴力的设置为
*即可
{
"activationEvents": ["*"]
}
command的逻辑实现
在package.json中我们仅仅定义了command,command触发的逻辑在src/extension.ts中:
export function active (context) {
context.subscriptions.push(
vscode.commands.registerCommand(
'test-plugin.helloWorld', // 注意这个参数,必须和packages.json中的command一致
() => {
// command的具体逻辑
vscode.window.showInformationMessage('Hello World!');
}
)
);
}
注释说明的也比较清晰啦,大概这样子,我们就可以看到命令执行后,弹出一个Hello World的提示语。
总结
通过上边的学习,我们会发现以下2处的需要完全一致,而且都是{plugin-name}.{value}的格式。
那么我们不遵守这个格式,只要保证一致是否可以正常工作呢?答案是:完全可以。
但为什么官方的例子里面都是使用{plugin-name}.{value}的格式呢?
以我个人经验,为了防止不同插件重名出现未知的问题,插件名字在整个生态是唯一的,以plugin-name开头,能够保证唯一性。
so,那我可不可以A插件调用B插件的命令呢?
如果你有这个想法,说明你已经对插件的理解又高人一步了!