Lua Academy · Урок

Поиск и загрузка плагинов

Сканируйте каталоги в поисках файлов плагинов и загружайте их с помощью require или loadfile.

Урок 1 из 413 шагов

«Поиск и загрузка плагинов» — бесплатный урок Lua Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.

Что такое архитектура плагинов?

Архитектура плагинов позволяет стороннему коду расширять приложение без изменения его ядра. require и динамическая загрузка в Lua естественным образом поддерживают такой подход.

Поиск плагинов по соглашению

Просканируйте каталог в поисках файлов *.lua, соответствующих соглашению об именовании, а затем загрузите каждый из них как плагин.

local function discoverPlugins(dir)
  local plugins = {}
  -- platform-specific dir scan; here a mock example
  for _, name in ipairs({"logger", "cache", "auth"}) do
    local ok, mod = pcall(require, dir .. "." .. name)
    if ok then plugins[name] = mod end
  end
  return plugins
end

Использование package.path для поиска

Расширьте package.path, чтобы require мог находить плагины в пользовательском каталоге.

package.path = package.path .. ";./plugins/?.lua"
local plugin = require("myplugin")

loadfile для динамической загрузки

loadfile(path) компилирует файл Lua во фрагмент кода, не выполняя его. Выполните его с помощью (), чтобы получить таблицу модуля плагина.

local function loadPlugin(path)
  local chunk, err = loadfile(path)
  if not chunk then return nil, err end
  local ok, result = pcall(chunk)
  if not ok then return nil, result end
  return result
end

Манифест плагина

Каждый плагин экспортирует таблицу манифеста с описанием своего имени, версии и зависимостей.

-- plugins/logger.lua
return {
  name    = "logger",
  version = "1.0",
  deps    = {},
  init    = function(app) app:on("log", print) end,
}

Разрешение зависимостей

Перед инициализацией плагина проверьте, что все его зависимости уже загружены.

local function initPlugin(app, plugins, name)
  local p = plugins[name]
  if not p then error("Plugin not found: " .. name) end
  for _, dep in ipairs(p.deps or {}) do
    if not plugins[dep] then
      error(("Plugin %s requires %s"):format(name, dep))
    end
  end
  if p.init then p.init(app) end
end

Горячая перезагрузка плагинов

Чтобы перезагрузить плагин, удалите его из package.loaded, загрузите заново с помощью require и повторно зарегистрируйте перехватчики.

package.loaded["plugins.logger"] = nil
plugins.logger = require("plugins.logger")
plugins.logger.init(app)

Реестр плагинов

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

Изоляция ошибок

Загружайте плагины с помощью pcall, чтобы неисправный плагин не завершил работу всего приложения.

local ok, err = pcall(function()
  plugins[name] = loadPlugin(path)
  initPlugin(app, plugins, name)
end)
if not ok then
  print("Plugin load failed:", name, err)
end

Метаданные плагина

Храните дополнительные метаданные: описание, автора и схему конфигурации. Используйте их для отображения в интерфейсе или автоматической настройки.

Ленивая загрузка

Загружайте плагины только при первой необходимости, а не заранее во время запуска. Реализуйте это с помощью таблицы-посредника с метаметодом __index, запускающим загрузку.

Вопрос о загрузке плагинов

В чём преимущество использования pcall при загрузке плагинов?

Повторение: поиск и загрузка плагинов

Ищите плагины, сканируя каталоги или используя соглашения об именовании. Загружайте их с помощью loadfile или require. Проверяйте манифесты и разрешайте зависимости. Всегда используйте pcall, чтобы изолировать ошибки загрузки.

Можно начать бесплатно

Изучай Lua с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
40
Уроки
159

Часто задаваемые вопросы

Урок «Поиск и загрузка плагинов» бесплатный?

Да — полный текст урока «Поиск и загрузка плагинов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.

Чему я научусь в уроке «Поиск и загрузка плагинов»?

Сканируйте каталоги в поисках файлов плагинов и загружайте их с помощью require или loadfile. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Lua Academy?

Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Поиск и загрузка плагинов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Lua Academy?

Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Поиск и загрузка плагинов
  2. API плагинов и система хуков
  3. Изоляция выполнения плагинов
  4. Версионирование и управление зависимостями
← Назад к Lua Academy