Versionamento e gerenciamento de dependências
Acompanhe versões de plugins e verifique a compatibilidade no momento do carregamento.
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
endVerificaçã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
endResoluçã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
endCaminhos 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.
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
- Descoberta e carregamento de plugins
- API de plugins e sistema de hooks
- Execução isolada de plugins
- Versionamento e gerenciamento de dependências