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插件的命令呢?
如果你有这个想法,说明你已经对插件的理解又高人一步了!
网络异常,图片无法展示
|