Плагин

В NocoBase серверный плагин предоставляет модульный способ расширения и настройки функциональности серверной части. Разработчики могут расширять класс Plugin из @nocobase/server, чтобы регистрировать события, API, конфигурации разрешений и другую пользовательскую логику на разных этапах жизненного цикла.

Класс плагина

Базовая структура классов плагинов выглядит следующим образом:

import { Plugin } from '@nocobase/server';

export class PluginHelloServer extends Plugin {
  async afterAdd() {}

  async beforeLoad() {}

  async load() {}

  async install() {}

  async afterEnable() {}

  async afterDisable() {}

  async remove() {}

  async handleSyncMessage(message: Record<string, any>) {}

  static async staticImport() {}
}

export default PluginHelloServer;

Жизненный цикл

Методы жизненного цикла плагина выполняются в следующем порядке. Каждый метод имеет свое определенное время выполнения и цель:

Метод жизненного циклаСрок выполненияОписание
staticImport()Перед загрузкой плагинаМетод статического класса, выполняемый на этапе инициализации независимо от состояния приложения или плагина, используемый для работы по инициализации, которая не зависит от экземпляров плагина.
afterAdd()Выполняется сразу после добавления плагина в менеджер плагиновЭкземпляр плагина уже создан, но инициализация всех плагинов еще не завершена. Подходит для базовой инициализации.
beforeLoad()Выполняется перед load() всех плагиновНа этом этапе можно получить доступ ко всем включенным экземплярам плагинов. Подходит для регистрации моделей базы данных, подписки на события базы данных, регистрации промежуточного ПО и другой подготовительной работы.
load()Выполняется при загрузке плагинаbeforeLoad() всех плагинов завершается до запуска load(). Подходит для регистрации ресурсов, API-интерфейсов, сервисов и другой основной бизнес-логики.
install()Выполняется при первой активации плагинаВыполняется только один раз при первом включении плагина. Обычно используется для инициализации структуры таблиц базы данных, вставки исходных данных и другой установочной логики.
afterEnable()Выполняется после включения плагинаВыполняется каждый раз при включении плагина, может использоваться для запуска запланированных задач, регистрации запланированных задач, установления соединений и других действий после включения.
afterDisable()Выполняется после отключения плагинаВыполняется, когда плагин отключен, и может использоваться для очистки ресурсов, остановки задач, закрытия соединений и других работ по очистке.
remove()Выполняется при удалении плагинаВыполняется при полном удалении плагина и используется для удаления данных: удаление таблиц базы данных, очистка файлов и т.д.
handleSyncMessage(message)Синхронизация сообщений при развертывании на нескольких узлахКогда приложение работает в многоузловом режиме, используется для обработки сообщений, синхронизированных с других узлов.

Описание порядка выполнения

Типичный поток выполнения методов жизненного цикла:

  1. Фаза статической инициализации: staticImport()
  2. Фаза запуска приложения: afterAdd()beforeLoad()load()
  3. Фаза включения первого плагина: afterAdd()beforeLoad()load()install()
  4. Фаза включения второго плагина: afterAdd()beforeLoad()load()
  5. Фаза отключения плагина: afterDisable() выполняется, когда плагин отключен.
  6. Фаза удаления плагина: remove() выполняется при удалении плагина.

app и связанные компоненты

При разработке плагина вы можете получать доступ к различным API экземпляра приложения через this.app. Это основной интерфейс для расширения функциональности плагина. Объект app содержит функциональные модули системы, которые можно использовать в методах жизненного цикла для реализации бизнес-требований.

Список компонентов app

Имя участникаТип/МодульОсновная цель
loggerLoggerЗапись системных логов; поддерживает разные уровни (info, warn, error, debug), удобные для отладки и мониторинга. См. Логирование.
dbDatabaseОперации уровня ORM, регистрация моделей, подписка на события, управление транзакциями и другие функции, связанные с базой данных. См. База данных.
resourceManagerResourceManagerРегистрация и управление REST API-ресурсами и обработчиками операций. См. РесурсМенеджер (ResourceManager).
aclACLУправление доступом: определение разрешений, ролей и политик доступа к ресурсам для детального контроля прав. См. Список управления доступом (ACL).
cacheManagerCacheManagerУправление системным кэшем; поддерживает Redis, кэш в памяти и другие серверные хранилища для повышения производительности приложения. См. Кэш.
cronJobManagerCronJobManagerИспользуется для регистрации, запуска и управления запланированными задачами, поддерживает настройку выражений Cron. См. Менеджер cron-задач.
i18nI18nПоддержка интернационализации, обеспечивающая функции многоязычного перевода и локализации, удобные для плагинов с поддержкой нескольких языков. См. Интернационализация (i18n).
cliCLIУправление интерфейсом командной строки, регистрация и выполнение пользовательских команд, расширение возможностей CLI NocoBase. См. Команда.
dataSourceManagerDataSourceManagerУправление несколькими источниками данных и их соединениями, поддержка сценариев с несколькими источниками данных. См. Менеджер источников данных.
pmPluginManagerМенеджер плагинов для динамической загрузки, включения, отключения и удаления плагинов, а также управления их зависимостями.

Подробную информацию об использовании каждого модуля см. в соответствующих главах документации.