Анатомия расширения
Вы смогли запустить базовое расширение. Давайте разберемся, как оно работает изнутри.
Расширение из примера делает 3 основные вещи:
-
Регистрирует событие активации - расширение активируется, когда пользователь запускает команду
helloworld.helloWorld -
Использует точку вклада - делает команду доступной в палитре команд и привязывает ее к идентификатору команды
helloworld.helloWorldчерезcontributes.commands -
Использует SDK - привязывает функцию к зарегистрированному идентификатору команды с помощью
commands.registerCommand
Ключевые концепции
Понимание этих концепций имеет решающее значение для написания расширений:
- Contribution Points - статические объявления, которые вы делаете в манифесте расширения
package.jsonдля расширения функциональности - SDK (Extension API) - набор JavaScript API, которые можно вызывать в коде расширения
Как правило, ваше расширение будет использовать комбинацию Contribution Points и SDK для расширения функциональности.
Структура расширения
Базовая структура расширения:
├── extension.js // Исходный код расширения
├── package.json // Манифест расширенияМанифест расширения
Каждое расширение должно иметь файл package.json - манифест расширения. Он содержит набор полей, таких как scripts и devDependencies, а также поля, специфичные для приложения, такие как publisher, contributes. Описания всех полей можно найти в Справочнике по манифесту расширения. Вот некоторые наиболее важные поля:
nameиpublisher- идентификаторы расширенияmain- точка входа расширенияactivationEventsиcontributes- события активации и точки вклада
{
"name": "my-first-extension",
"displayName": "My First Extension",
"description": "Пример расширения",
"version": "1.0.0",
"publisher": "your-name",
"main": "./extension.js",
"contributes": {
"commands": [
{
"command": "my-first-extension.helloWorld",
"title": "Hello World"
}
]
}
}Файл расширения
Файл расширения экспортирует две функции: activate и deactivate.
activateвыполняется при наступлении зарегистрированного события активацииdeactivateдает возможность очистить расширение перед его деактивацией
Для многих расширений явная очистка может не потребоваться, и метод deactivate можно удалить. Однако, если расширению необходимо выполнить операцию во время завершения работы, отключения или удаления расширения, этот метод подходит для этого.
export function activate(sdk, context) {
console.log('Расширение активировано!');
const disposable = sdk.commands.registerCommand(
'my-first-extension.helloWorld',
() => {
sdk.window.showInfoMessage('Hello World from my extension!');
}
);
context.subscriptions.push(disposable);
}
export function deactivate() {
console.log('Расширение деактивировано!');
}