# 激活事件 - package.json
在VS Code中,插件都是懒加载的,所以你得为VS Code提供插件激活的时机。 我们提供了下列激活时机:
onLanguage:${language}onCommand:${command}onDebugworkspaceContains:${toplevelfilename}onFileSystem:${scheme}onView:${viewId}onUri*
我们在package.json 插件清单中提供了一个插件最少所需的激活事件。
# activationEvents.onLanguage
特定语言文件打开时激活:
...
"activationEvents": [
"onLanguage:python"
]
...
2
3
4
5
onLanguage只支持语言标识符中的值。
在activationEvents数组中声明多个onLanguage入口实现多语言支持
"activationEvents": [
"onLanguage:json",
"onLanguage:markdown",
"onLanguage:typescript"
]
...
2
3
4
5
6
# activationEvents.onCommand
当调用命令时激活事件:
...
"activationEvents": [
"onCommand:extension.sayHello"
]
...
2
3
4
5
# activationEvents.onDebug
调试会话(debug session)启动前激活:
...
"activationEvents": [
"onDebug"
]
...
2
3
4
5
# onDebugInitialConfigurations and onDebugResolve
这是两个粒度更细的激活事件:
onDebugInitialConfigurations在DebugConfigurationProvider中的provideDebugConfigurations方法之前触发。onDebugResolve:type在DebugConfigurationProvider的resolveDebugConfiguration方法之前触发。
首要原则: 如果调试插件的激活事件比较轻量,那么就用onDebug。相反,根据DebugConfigurationProvider实现的对应方法( provideDebugConfigurations或resolveDebugConfiguration),使用onDebugInitialConfigurations或onDebugResolve 。参见 Debug Type specific Hooks。
# activationEvents.workspaceContains
文件夹打开后,且文件夹中至少包含一个符合glob模式的文件时触发。
...
"activationEvents": [
"workspaceContains:**/.editorconfig"
]
...
2
3
4
5
# activationEvents.onFileSystem
从*协议(scheme)*打开的文件或文件夹打开时触发。通常是file-协议,也可以用自定义的文件供应器函数替换掉,比如ftp、ssh。
...
"activationEvents": [
"onFileSystem:sftp"
]
...
2
3
4
5
# activationEvents.onView
指定的视图id展开时触发:
...
"activationEvents": [
"onView:nodeDependencies"
]
...
2
3
4
5
# activationEvents.onUri
插件的系统级URI打开时触发。这个URI协议需要带上vscode 或者 vscode-insiders协议。URI授权必须是插件的唯一标识,剩余的URI是可选的。
...
"activationEvents": [
"onUri"
]
...
2
3
4
5
如果 vscode.git插件定义了onUri激活事件,那么下列任意URI打开时就会触发:
vscode://vscode.git/initvscode://vscode.git/clone?url=https%3A%2F%2Fgithub.com%2FMicrosoft%2Fvscode-vsce.gitvscode-insiders://vscode.git/init(for VS Code Insiders)
# activationEvents.*
当VS Code启动时触发。为了保证良好的用户体验,只在你的插件没有其他任何激活事件的前提下,添加这个激活事件。
...
"activationEvents": [
"*"
]
...
2
3
4
5
注意
一个插件如果侦听了多个激活事件,那么最好用"*"替换掉。
注意
插件必须从它的主模块中输出一个activate()函数,当任意的激活事件触发时,VS Code会仅仅调用一次这个函数。此外,插件也应该 导出一个deactivate()函数,当VS Code关闭时执行清理的任务。如果清理进程是异步的,插件的deactivate()必须返回一个Promise。如果这个清理任务是同步的,那么deactivate()可以返回undefined。
# 下一步
学习更多VS Code扩展性模型,看看下列主题: