Lua Academy · Aula

Versionamento e gerenciamento de dependências

Acompanhe versões de plugins e verifique a compatibilidade no momento do carregamento.

Aula 4 de 413 etapas

Versionamento e gerenciamento de dependências é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.

Por que o versionamento é importante

As extensões evoluem. Uma extensão v2.0 pode ser incompatível com as APIs da v1.0. O controle de versões evita falhas silenciosas de compatibilidade.

Versionamento semântico

Use o versionamento semântico: MAJOR.MINOR.PATCH. Alterações incompatíveis incrementam MAJOR, novos recursos incrementam MINOR e correções de falhas incrementam PATCH.

Manifesto de extensão com versão

Cada extensão declara sua própria versão e a versão exigida da API do aplicativo.

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

Análise de versões

Analise uma cadeia de versão em componentes comparáveis.

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

Verificação de compatibilidade

Ao carregar uma extensão, verifique se a versão da API do aplicativo atende ao requisito da extensão.

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

Resolução do grafo de dependências

Crie um grafo de dependências e faça uma ordenação topológica para determinar a ordem de carregamento.

Detecção de dependências circulares

Registre quais extensões estão em processo de carregamento. Se uma extensão depender de outra que já esteja sendo carregada (em um ciclo), gere um erro.

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

Caminhos de atualização

Documente guias de migração para aumentos de versão MAJOR. Considere fornecer uma camada de compatibilidade para APIs antigas de extensões durante um período de transição.

Registro de extensões com versões

Um registro central armazena todas as versões instaladas das extensões. Resolva conflitos dando preferência à versão compatível mais alta.

Padrão de arquivo de bloqueio

Assim como o package-lock.json do npm: registre as versões exatas usadas em uma implantação de produção para garantir compilações reproduzíveis.

Negociação de versões em tempo de execução

Permita que as extensões declarem várias versões compatíveis da API. O aplicativo hospedeiro negocia e escolhe a versão mais alta compatível com ambas as partes.

Pergunta sobre versionamento

O que um aumento de versão MAJOR no versionamento semântico indica?

Recapitulação: versionamento e dependências

Inclua a versão e apiRequired em todo manifesto de extensão. Analise e compare as versões no momento do carregamento. Detecte dependências circulares. Use a ordenação topológica para determinar a ordem de carregamento. Mantenha um arquivo de bloqueio para implantações de produção reproduzíveis.

Grátis para começar

Aprenda Lua com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
40
Aulas
159

Perguntas Frequentes

A aula “Versionamento e gerenciamento de dependências” é grátis?

Sim — o texto completo de “Versionamento e gerenciamento de dependências” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.

O que vou aprender em “Versionamento e gerenciamento de dependências”?

Acompanhe versões de plugins e verifique a compatibilidade no momento do carregamento. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Lua Academy?

Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Versionamento e gerenciamento de dependências”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Lua Academy?

Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Descoberta e carregamento de plugins
  2. API de plugins e sistema de hooks
  3. Execução isolada de plugins
  4. Versionamento e gerenciamento de dependências
← Voltar para Lua Academy