Zum Inhalt springen

Plugins veröffentlichen

Sobald Sie ein Plugin erstellt haben, können Sie es im EmDash Marketplace veröffentlichen, damit andere Websites es über das Admin-Dashboard installieren können.

Stellen Sie vor der Veröffentlichung sicher, dass Ihr Plugin:

  • Eine gültige package.json mit dem "."-Export besitzt, der auf Ihren Plugin-Einstiegspunkt zeigt
  • definePlugin() mit einer eindeutigen id und einer gültigen semver-version verwendet
  • Seine capabilities deklariert (auf welche APIs es Zugriff benötigt)

Veröffentlichte Plugins werden als .tar.gz-Tarballs verteilt, die enthalten:

DateiErforderlichBeschreibung
manifest.jsonJaPlugin-Metadaten, extrahiert aus definePlugin()
backend.jsNeinGebündelter Sandbox-Code (eigenständiges ES-Modul)
admin.jsNeinGebündelter Admin-UI-Code
README.mdNeinPlugin-Dokumentation
icon.pngNeinPlugin-Icon (256x256 PNG)
screenshots/NeinBis zu 5 Screenshots (PNG/JPEG, max. 1920x1080)

Die manifest.json wird automatisch aus Ihrem definePlugin()-Aufruf generiert. Sie enthält die Plugin-ID, Version, Capabilities, Hook-Namen, Routen-Namen und Admin-Konfiguration – aber keinen ausführbaren Code.

Der Befehl emdash plugin bundle erzeugt einen Tarball aus Ihrem Plugin-Quellcode:

Terminal-Fenster
cd packages/plugins/my-plugin
emdash plugin bundle

Dies wird:

  1. Ihre package.json lesen, um Einstiegspunkte zu finden
  2. Den Haupteinstiegspunkt mit tsdown bauen, um das Manifest zu extrahieren
  3. backend.js bündeln (minifiziert, tree-shaken, eigenständig)
  4. admin.js bündeln, falls ein "./admin"-Export existiert
  5. Assets sammeln (README, Icon, Screenshots)
  6. Das Bundle validieren (Größenlimits, keine Node.js-Built-ins im Backend)
  7. {id}-{version}.tar.gz in dist/ schreiben

Der Bundle-Befehl findet Ihren Code über package.json-Exports:

package.json
{
"exports": {
".": { "import": "./dist/index.mjs" },
"./sandbox": { "import": "./dist/sandbox-entry.mjs" },
"./admin": { "import": "./dist/admin.mjs" }
}
}
ExportZweckGebaut als
"."Haupteinstiegspunkt – wird verwendet, um das Manifest zu extrahierenExternals: emdash, @emdash-cms/*
"./sandbox"Backend-Code, der im Sandbox läuftVollständig eigenständig (keine Externals)
"./admin"Admin-UI-KomponentenVollständig eigenständig

Falls "./sandbox" fehlt, sucht der Befehl als Fallback nach src/sandbox-entry.ts.

Terminal-Fenster
emdash plugin bundle [--dir <path>] [--outDir <path>]
FlagStandardBeschreibung
--dirAktuelles VerzeichnisPlugin-Quellverzeichnis
--outDir, -odistAusgabeverzeichnis für den Tarball

Der Bundle-Befehl prüft:

  • Größenlimit – Das gesamte Bundle muss unter 5MB liegen
  • Keine Node.js-Built-ins – backend.js darf nicht fs, path, child_process usw. importieren (Sandbox-Code läuft in einem V8-Isolat, nicht in Node.js)
  • Icon-Dimensionen – icon.png sollte 256x256 sein (warnt bei falscher Größe, schließt es aber trotzdem ein)
  • Screenshot-Limits – Max. 5 Screenshots, max. 1920x1080

Der Befehl emdash plugin publish lädt Ihren Tarball in den Marketplace hoch:

Terminal-Fenster
emdash plugin publish

Dies findet den neuesten .tar.gz in Ihrem dist/-Verzeichnis und lädt ihn hoch. Sie können den Tarball auch explizit angeben oder vor der Veröffentlichung bauen:

Terminal-Fenster
# Expliziter Pfad zum Tarball
emdash plugin publish --tarball dist/my-plugin-1.0.0.tar.gz
# Zuerst bauen, dann veröffentlichen
emdash plugin publish --build

Beim ersten Veröffentlichen authentifiziert die CLI Sie über GitHub:

  1. Die CLI öffnet Ihren Browser auf die GitHub-Geräteautorisierungsseite
  2. Sie geben den im Terminal angezeigten Code ein
  3. GitHub stellt ein Zugriffstoken aus
  4. Die CLI tauscht es gegen ein Marketplace-JWT aus (gespeichert in ~/.config/emdash/auth.json)

Das Token ist 30 Tage gültig. Nach Ablauf werden Sie beim nächsten Veröffentlichungsversuch zur erneuten Authentifizierung aufgefordert.

Sie können die Authentifizierung auch separat verwalten:

Terminal-Fenster
# Anmelden ohne zu veröffentlichen
emdash plugin login
# Abmelden (gespeichertes Token löschen)
emdash plugin logout

Falls Ihre Plugin-ID im Marketplace noch nicht existiert, registriert emdash plugin publish sie automatisch, bevor die erste Version hochgeladen wird.

Jede veröffentlichte Version muss eine höhere semver-Version als die vorherige haben. Sie können eine bestehende Version nicht überschreiben oder erneut veröffentlichen.

Jede veröffentlichte Version durchläuft eine automatisierte Sicherheitsprüfung. Der Marketplace scannt Ihre backend.js und admin.js nach:

  • Datenexfiltrationsmustern
  • Credential-Harvesting über Einstellungen
  • Verschleiertem Code
  • Ressourcenmissbrauch (Crypto-Mining usw.)
  • Verdächtiger Netzwerkaktivität

Die Prüfung ergibt ein Urteil von bestanden, Warnung oder fehlgeschlagen, das in der Marketplace-Ansicht des Plugins angezeigt wird. Je nach Durchsetzungsstufe des Marketplaces kann ein Urteil fehlgeschlagen die Veröffentlichung vollständig blockieren.

Terminal-Fenster
emdash plugin publish [--tarball <path>] [--build] [--dir <path>] [--registry <url>]
FlagStandardBeschreibung
--tarballNeuester .tar.gz in dist/Expliziter Tarball-Pfad
--buildfalseemdash plugin bundle vor dem Veröffentlichen ausführen
--dirAktuelles VerzeichnisPlugin-Verzeichnis (wird mit --build verwendet)
--registryhttps://marketplace.emdashcms.comMarketplace-URL

Hier ist der typische Veröffentlichungszyklus:

Terminal-Fenster
# 1. Nehmen Sie Ihre Änderungen vor
# 2. Erhöhen Sie die Version in definePlugin() und package.json
# 3. Bündeln und veröffentlichen Sie in einem Schritt
emdash plugin publish --build

Oder wenn Sie das Bundle zuerst inspizieren möchten:

Terminal-Fenster
# Tarball erstellen
emdash plugin bundle
# Ausgabe prüfen
tar tzf dist/my-plugin-1.1.0.tar.gz
# Veröffentlichen
emdash plugin publish