Skip to main content

plugin

Манифест, пути плагина и его выгрузка. plugin — одновременно вызов манифеста и пространство имён.

plugin{}

Объявляет метаданные и требования плагина.

Поля

Пример

Вызывается один раз, в manifest.lua — это единственная обязанность этого файла. Движок грузит manifest.lua раньше init.lua и требует, чтобы plugin{} там прозвучал: если нет, плагин не запускается и init.lua не выполняется вовсе. См. структуру плагина. requires проверяется при загрузке: отсутствующий модуль останавливает плагин на первой строке manifest.lua с указанием, чего не хватает. api_version меняется только на ломающем изменении API — новый натив (например http_server) может появиться в сборке, которая всё ещё говорит api_version = 1. Для этого min_engine_version: точнее, чем api_version, и не требует ждать следующего v2. max_engine_version — обратный случай, «плагин проверен только по эту сборку», отказ загрузки на более новой. Сравниваются как X.Y.Z, отсутствующая часть читается как 0. Текущая сборка — sv.version.
api_version выше текущего — отказ загрузки: сборка ещё не знает этот API.
Лёгкая опечатка: plugin = { ... } вместо plugin { ... } присваивает таблицу и затирает пространство имён — движок решит, что манифест ничего не объявил, и остановит загрузку с ошибкой в консоли.

plugin.id

Имя папки плагина.

Возвращает

Это и есть идентичность плагина — на неё ключуется реестр export.

plugin.dir

Абсолютный путь к папке плагина.

Возвращает

Здесь лежит код, и установщик перезаписывает его при обновлении. Данные клади в plugin.data_dir().

plugin.data_dir

Каталог плагина под данные, переживающий обновление.

Возвращает

Создаётся при первом вызове. Туда же кладут файлы store и db.open.

plugin.on_unload

Регистрирует обработчик выгрузки этого плагина.

Аргументы

Возвращает

Ничего.

Пример

Срабатывает и при lua_reload, и при lua_reload <plugin>. Обработчики выполняются в обратном порядке регистрации — плагин разбирает себя так же, как собирал. Выполняются до того, как снимаются хендлеры, таймеры и базы плагина, поэтому внутри всё ещё работает.

Смотри также