Plugin-API und Hook-System
Definieren Sie eine Plugin-API-Tabelle und registrieren Sie Hooks für Lebenszyklusereignisse
Plugin-API und Hook-System ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist ein Hook-System?
Ein Hook-System ermöglicht es Plugins, Callbacks für bestimmte Ereignisse im Lebenszyklus der Anwendung zu registrieren. Die Anwendung ruft alle registrierten Hooks zum passenden Zeitpunkt auf.
Das Anwendungsobjekt
Das App-Objekt wird Plugins während der Initialisierung übergeben. Es stellt die API zur Registrierung von Hooks bereit.
local App = {}
App.__index = App
App._hooks = {}
function App:on(event, fn)
self._hooks[event] = self._hooks[event] or {}
table.insert(self._hooks[event], fn)
end
function App:emit(event, ...)
for _, fn in ipairs(self._hooks[event] or {}) do
fn(...)
end
endRegistrieren von Hooks durch Plugins
Die init-Funktion eines Plugins empfängt die App und registriert Hooks.
-- plugins/auth.lua
return {
name = "auth",
init = function(app)
app:on("request", function(req)
if not req.headers.token then
error("Unauthorized")
end
end)
end
}Hook-Prioritäten
Ermöglichen Sie Plugins, eine Priorität anzugeben, damit kritische Hooks (z. B. für die Authentifizierung) vor optionalen Hooks (z. B. für die Protokollierung) ausgeführt werden.
function App:on(event, fn, priority)
priority = priority or 50
local hooks = self._hooks[event] or {}
hooks[#hooks+1] = {fn=fn, priority=priority}
table.sort(hooks, function(a,b) return a.priority < b.priority end)
self._hooks[event] = hooks
endRückgabewerte von Hooks
Einige Hooks geben Werte zurück, die das Verhalten verändern. Die App kann beim ersten Rückgabewert ungleich nil die weitere Verarbeitung abbrechen.
function App:filter(event, data)
for _, fn in ipairs(self._hooks[event] or {}) do
local result = fn(data)
if result ~= nil then return result end
end
return data
endAufheben der Hook-Registrierung
Stellen Sie eine :off(event, fn)-Methode bereit, um einen bestimmten Hook anhand seiner Funktionsreferenz zu entfernen.
Namensräume für Hooks
Verwenden Sie durch Punkte getrennte Ereignisnamen zur Organisation: "request.before", "request.after", "db.query".
Von Plugins bereitgestellte Befehle
Über Hooks hinaus können Plugins benannte Befehle registrieren, die von der App oder anderen Plugins aufgerufen werden können.
function App:registerCommand(name, fn)
self._commands = self._commands or {}
self._commands[name] = fn
end
function App:run(name, ...)
local cmd = self._commands[name]
if cmd then return cmd(...) end
error("Unknown command: " .. name)
endMiddleware-Muster
Hook-Ketten können einen Middleware-Stack bilden, in dem jeder Hook den nächsten aufruft. Dadurch werden Pipelines zur Transformation von Anfragen und Antworten ermöglicht.
Plugins isoliert testen
Erstellen Sie in Tests ein simuliertes App-Objekt, um zu überprüfen, ob die Hooks eines Plugins korrekt registriert und aufgerufen werden.
Dokumentationskonvention
Dokumentieren Sie alle verfügbaren Hook-Namen, ihre Argumente und die erwarteten Rückgabewerte. Dies bildet den Plugin-Vertrag, auf den Entwickler von Drittanbieter-Plugins angewiesen sind.
Frage zum Hook-System
Welchen Zweck hat die Priorität in einem Hook-System?
Zusammenfassung: Plugin-API und Hook-System
Stellen Sie eine Registrierungs-API :on(event, fn) am App-Objekt bereit. Lösen Sie Ereignisse mit :emit() aus. Fügen Sie Prioritäten für eine geordnete Ausführung hinzu. Verwenden Sie Ereignisnamen mit Namensräumen und dokumentieren Sie den Hook-Vertrag für Plugin-Entwickler.
Häufig gestellte Fragen
Ist die Lektion „Plugin-API und Hook-System“ kostenlos?
Ja — der vollständige Text von „Plugin-API und Hook-System“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Plugin-API und Hook-System“?
Definieren Sie eine Plugin-API-Tabelle und registrieren Sie Hooks für Lebenszyklusereignisse Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Lua Academy zu starten?
Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Plugin-API und Hook-System“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?
Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Plugins erkennen und laden
- Plugin-API und Hook-System
- Plugin-Ausführung in einer Sandbox
- Versions- und Abhängigkeitsverwaltung