На этой страницеdefinePlugin
Жизненный цикл
Точка входа, активация, остановка и освобождение ресурсов.
definePlugin
У плагина нет обязательного базового класса. Точка входа экспортирует результат definePlugin с методами activate и необязательным deactivate.
const _plugin = "donutgram";
let command;
export default definePlugin({
async activate(api) {
command = await api.commands.register({
id: "hello",
title: "Приветствие",
placement: "composer",
async run() {
await api.ui.toast("Привет!");
}
});
},
async deactivate() {
if (command) await command.dispose();
command = undefined;
}
});
В манифесте такой команды требуется ui.contribute / composer.
Активация
Регистрируйте обработчики внутри activate, а не при импорте модуля. Дождитесь асинхронных регистраций. Ошибка активации не должна оставлять плагин в состоянии «работает».
Обе формы definePlugin(implementation) и definePlugin(manifest, implementation) допустимы. Метаданные установки всё равно берутся из статически проверенного манифеста пакета.
Остановка
Плагин останавливается при выключении, удалении, смене аккаунта и изменениях состояния приложения. Не рассчитывайте на непрерывную фоновую работу.
Нативный хост освобождает принадлежащие runtime команды, callbacks и страницы. deactivate полезен для собственного аккуратного завершения, но не должен быть единственным местом записи важных данных.
Disposable
Регистрация команды, события и трансформации возвращает объект с асинхронным dispose. Вызов позволяет убрать конкретную регистрацию до полной остановки плагина.
Не делать при загрузке
Не создавайте бесконечные циклы, не загружайте внешний код и не предполагаете наличие Node.js или браузерных объектов. Лимиты и допустимые глобальные объекты описаны в среде выполнения.