0Pricing
Lua Academy · Урок

Версионирование и управление зависимостями

Отслеживайте версии плагинов и проверяйте совместимость во время загрузки.

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

Зачем нужно управление версиями

Плагины развиваются. Плагин версии 2.0 может быть несовместим с API версии 1.0. Отслеживание версий предотвращает незаметные сбои совместимости.

Семантическое версионирование

Используйте семантическое версионирование: MAJOR.MINOR.PATCH. Несовместимые изменения увеличивают MAJOR, новые функции — MINOR, исправления ошибок — PATCH.

Манифест плагина с версией

Каждый плагин объявляет собственную версию и требуемую версию API приложения.

return {
  name        = "auth",
  version     = "2.1.0",
  apiRequired = ">=1.0.0",
  deps        = { {name="logger", version=">=1.0.0"} },
  init        = function(app) -- ... end
}

Разбор версии

Разберите строку версии на компоненты, которые можно сравнивать.

local function parseVersion(v)
  local major, minor, patch = v:match("(%d+)%.(%d+)%.(%d+)")
  return {tonumber(major), tonumber(minor), tonumber(patch)}
end
local function versionGe(a, b)
  a, b = parseVersion(a), parseVersion(b)
  for i = 1, 3 do
    if a[i] ~= b[i] then return a[i] > b[i] end
  end
  return true
end

Проверка совместимости

При загрузке плагина проверьте, соответствует ли версия API приложения его требованию.

local APP_VERSION = "1.5.0"
local function checkCompatibility(plugin)
  local req = plugin.apiRequired or ">=0.0.0"
  local minVer = req:match(">=(.+)")
  if minVer and not versionGe(APP_VERSION, minVer) then
    error(("Plugin %s requires app >= %s, got %s"):format(
      plugin.name, minVer, APP_VERSION))
  end
end

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

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

Обнаружение циклических зависимостей

Отслеживайте плагины, находящиеся в процессе загрузки. Если плагин зависит от другого плагина, который уже загружается, то есть образует цикл, вызовите ошибку.

local loading = {}
local function loadWithCycleCheck(name, plugins)
  if loading[name] then error("Circular dependency: " .. name) end
  loading[name] = true
  -- load deps then load plugin
  loading[name] = nil
end

Пути обновления

Документируйте руководства по миграции для переходов на новую версию MAJOR. На переходный период можно предоставить слой совместимости со старыми API плагинов.

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

Центральный реестр хранит все установленные версии плагинов. Разрешайте конфликты, отдавая предпочтение самой новой совместимой версии.

Шаблон файла блокировки

Как и package-lock.json в npm: записывайте точные версии, использованные в производственном развёртывании, чтобы обеспечить воспроизводимые сборки.

Согласование версий во время выполнения

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

Вопрос о версионировании

Что означает увеличение версии MAJOR в семантическом версионировании?

Повторение: версии и зависимости

Включайте version и apiRequired в каждый манифест плагина. Разбирайте и сравнивайте версии во время загрузки. Обнаруживайте циклические зависимости. Используйте топологическую сортировку для определения порядка загрузки. Храните файл блокировки для воспроизводимых производственных развёртываний.

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

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

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

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

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

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

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

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

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

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

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

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

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