Plugins

Installation

Terminal
npm install @nera-static/plugin-navigation

Jede Abhängigkeit, deren Name mit @nera-static/plugin- beginnt, wird automatisch entdeckt und angewendet — kein Registrierungsschritt. (@nera-static/plugin-utils ist eine Hilfsbibliothek, kein Plugin, und wird übersprungen.)

Ein Plugin nur für eine Website braucht kein Paket: Lege es unter src/plugins/<name>/index.js ab oder bestimme mit folders.plugins in config/app.yaml einen anderen Ordner. Siehe Schreibe dein eigenes lokales Plugin.

Der Hook-Vertrag

Ein Plugin ist ein ESM-Modul, das bis zu drei Hooks exportiert, getAppData, getMetaData und getAssets (unten):

js
export function getAppData({ app, pagesData }) {
    return { ...app, myKey: 'value' }   // must return a plain object
}

export function getMetaData({ app, pagesData }) {
    return pagesData                    // must return an array
}

getAppData läuft zuerst; getMetaData sieht das app, das es zurückgegeben hat. Core wartet auf jeden Hook (seit Core 4.3.0; ältere Versionen ersetzten app stillschweigend durch ein Promise), aber synchron bleibt die sichere Wahl — so machen es auch die veröffentlichten Plugins.

Ein Plugin, das Dateien erzeugt (zum Beispiel generierte Bilder), exportiert zusätzlich getAssets (Core ≥ 4.13.0). Der Hook läuft nach getAppData und getMetaData aller Plugins, sieht das endgültige app und pagesData und gibt zurück, was nach public/ kopiert werden soll:

js
export function getAssets({ app, pagesData }) {
    return [{ from: '/abs/path/to/files', to: '_img' }]
}

from ist eine absolute Datei oder ein absoluter Ordner, to ein Pfad innerhalb von public/. Core kopiert diese Einträge nach den Assets des Themes und vor deinen eigenen, sodass dein theme/assets/ bei gleichen Namen weiterhin gewinnt. Ungültige Einträge werden mit einer Warnung übersprungen.

Die Konfiguration liegt in deinem Projekt

Jedes Plugin liest config/<name>.yaml aus deiner Site, nicht aus dem Paket. Das im Paket mitgelieferte YAML ist Dokumentation; kopiere es in dein config/ und bearbeite es. Fehlende Schlüssel fallen auf sinnvolle Standardwerte zurück.

Reihenfolge

config/plugin-order.yaml steuert die Ausführungsreihenfolge: Namen unter start: laufen zuerst, dann alles Übrige alphabetisch, dann Namen unter end:. Die Suche läuft zuletzt, damit sie die endgültigen Seitendaten indexiert.

Templates

Plugins, die Views mitliefern, stellen einen Publish-Befehl bereit:

Terminal
npx nera-navigation      # copies templates into theme/views/vendor/plugin-navigation/

include sie dann aus deinen Layouts. Das Veröffentlichen wird übersprungen, wenn der Ordner bereits existiert — lösche ihn (oder übergib --force), um Template-Updates einzuspielen.