0Pricing
Lua Academy · Lekcja

Wyszukiwanie i ładowanie pluginów

Proszę skanować katalogi w poszukiwaniu plików pluginów i ładować je za pomocą require lub loadfile.

Wyszukiwanie i ładowanie pluginów to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.

Czym jest architektura wtyczek?

Architektura wtyczek umożliwia rozszerzanie aplikacji przez kod innych firm bez modyfikowania jej rdzenia. Funkcje Lua require i dynamiczne ładowanie sprawiają, że takie podejście jest naturalne.

Wykrywanie wtyczek według konwencji

Należy przeskanować katalog w poszukiwaniu plików *.lua zgodnych z konwencją nazewniczą, a następnie załadować każdy z nich jako wtyczkę.

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

Używanie package.path do wykrywania

Należy rozszerzyć package.path, aby funkcja require mogła znajdować wtyczki w niestandardowym katalogu.

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

loadfile do dynamicznego ładowania

loadfile(path) kompiluje plik Lua do postaci chunka, nie wykonując go. Należy wykonać go za pomocą (), aby uzyskać tabelę modułu wtyczki.

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

Manifest wtyczki

Każda wtyczka eksportuje tabelę manifestu opisującą jej nazwę, wersję i zależności.

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

Rozwiązywanie zależności

Przed zainicjalizowaniem wtyczki należy sprawdzić, czy wszystkie jej zależności zostały już załadowane.

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

Ponowne ładowanie wtyczek na żywo

Aby ponownie załadować wtyczkę, należy usunąć ją z package.loaded, załadować ponownie za pomocą require i ponownie zarejestrować hooki.

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

Rejestr wtyczek

Należy prowadzić rejestr załadowanych wtyczek, aby zapobiegać wielokrotnemu ładowaniu i umożliwić sprawdzanie zależności.

Izolacja błędów

Wtyczki należy ładować za pomocą pcall, aby uszkodzona wtyczka nie powodowała awarii całej aplikacji.

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

Metadane wtyczki

Należy przechowywać dodatkowe metadane: opis, autora i schemat konfiguracji. Można ich użyć do wyświetlania interfejsu lub automatycznej konfiguracji.

Leniwe ładowanie

Wtyczki należy ładować dopiero wtedy, gdy są po raz pierwszy potrzebne, zamiast ładować je od razu podczas uruchamiania. Można to zrealizować za pomocą tabeli proxy z metametodą __index, która uruchamia ładowanie.

Pytanie o ładowanie wtyczek

Jaka jest zaleta używania pcall podczas ładowania wtyczek?

Podsumowanie: wykrywanie i ładowanie wtyczek

Wtyczki można wykrywać przez skanowanie katalogów lub stosowanie konwencji nazewniczych. Należy ładować je za pomocą loadfile lub require. Manifesty należy weryfikować, a zależności rozwiązywać. Do izolowania błędów ładowania należy zawsze używać pcall.

Często zadawane pytania

Czy lekcja „Wyszukiwanie i ładowanie pluginów” jest bezpłatna?

Tak — pełny tekst „Wyszukiwanie i ładowanie pluginów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wyszukiwanie i ładowanie pluginów”?

Proszę skanować katalogi w poszukiwaniu plików pluginów i ładować je za pomocą require lub loadfile. Ćwiczysz Lua Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Lua Academy?

Nie wymagamy żadnego doświadczenia. Lua Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Wyszukiwanie i ładowanie pluginów”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Lua Academy?

Tak. Każda lekcja Lua Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Wyszukiwanie i ładowanie pluginów
  2. API pluginów i system hooków
  3. Sandboxowanie wykonywania pluginów
  4. Wersjonowanie i zarządzanie zależnościami
← Powrót do Lua Academy