Sobald Ihr Sandbox-Plugin funktioniert, können Sie es auf dem EmDash-Marktplatz veröffentlichen, sodass andere Websites es mit einem Klick über das Admin-Dashboard installieren können. Der Veröffentlichungsprozess gilt nur für Sandbox-Plugins – native Plugins werden über npm verteilt und nicht in Marktplatz-Tarballs gebündelt.
Voraussetzungen
Vor der Veröffentlichung stellen Sie sicher, dass Ihr Plugin:
- Eine
package.jsonmit sowohl einem"."Export (dem Descriptor) als auch einem"./sandbox"Export (dem Runtime-Entry) hat. format: "standard"im Descriptor verwendet.- Eine eindeutige
idund eine gültige semverversionhat. - Seine
capabilitiesundallowedHostsim Descriptor korrekt deklariert.
Bundle-Format
Veröffentlichte Plugins werden als .tar.gz Tarballs verteilt, die Folgendes enthalten:
| Datei | Erforderlich | Beschreibung |
|---|---|---|
manifest.json | Ja | Plugin-Metadaten, extrahiert aus Descriptor und Sandbox-Entry |
backend.js | Ja | Gebündelter Sandbox-Code (eigenständiges ES-Modul) |
admin.js | Nein | Gebündelter Admin-UI-Code (nur wenn Block Kit-Interaktionen JS ausliefern) |
README.md | Nein | Plugin-Dokumentation |
icon.png | Nein | Plugin-Symbol (256×256 PNG) |
screenshots/ | Nein | Bis zu 5 Screenshots (PNG/JPEG, max. 1920×1080) |
manifest.json wird automatisch generiert. Es enthält Plugin-ID, Version, Capabilities, erlaubte Hosts, Hook-Namen, Routen-Namen und Admin-Konfiguration – aber keinen ausführbaren Code.
Ein Bundle erstellen
cd packages/plugins/my-plugin
emdash plugin bundle
Dies wird:
- Ihre
package.jsonlesen, um Einstiegspunkte zu finden. - Den Descriptor-Entry erstellen, um ID, Version, Capabilities und Admin-Konfiguration zu extrahieren.
backend.jsaus dem"./sandbox"Export bündeln – minifiziert, tree-shaken, vollständig eigenständig.admin.jsbündeln, falls ein"./admin"Export existiert.- Assets sammeln (README, Symbol, Screenshots).
- Das Bundle validieren (Größenbeschränkungen, keine Node.js-Built-ins in
backend.js, Capability-Checks). {id}-{version}.tar.gzindist/schreiben.
Einstiegspunkt-Auflösung
Der Bundle-Befehl findet Ihren Code über package.json Exports:
{
"exports": {
".": { "import": "./dist/index.mjs" },
"./sandbox": { "import": "./dist/sandbox-entry.mjs" },
"./admin": { "import": "./dist/admin.mjs" }
}
}
| Export | Zweck | Gebaut als |
|---|---|---|
"." | Descriptor – wird verwendet, um das Manifest zu extrahieren | Externals: emdash, @emdash-cms/* |
"./sandbox" | Runtime-Code (hooks, routes), der in der Sandbox ausgeführt wird | Vollständig eigenständig (keine Externals) |
"./admin" | Admin-UI-Komponenten (nur wenn Sie diese ausliefern) | Vollständig eigenständig |
Wenn "./sandbox" fehlt, sucht der Befehl als Fallback nach src/sandbox-entry.ts. Der Bundler bildet dist-Pfade automatisch auf Quellen zurück – wenn Ihr "." Export auf ./dist/index.mjs zeigt, findet und baut er src/index.ts.
Optionen
emdash plugin bundle [--dir <path>] [--outDir <path>]
| Flag | Standard | Beschreibung |
|---|---|---|
--dir | Aktuelles Verzeichnis | Plugin-Quellverzeichnis |
--outDir, -o | dist | Ausgabeverzeichnis für den Tarball |
Validierung
Der Bundle-Befehl überprüft:
- Größenbeschränkung – das gesamte Bundle muss unter 5 MB liegen.
- Keine Node.js-Built-ins in
backend.js– Sandbox-Code kannfs,path,child_processusw. nicht importieren. Ersetzen Sie diese durch Web-APIs oder verschieben Sie die Logik in ein natives Plugin. - Capability-Whitelist – deklarierte Capabilities müssen im bekannten Set sein (Tippfehler schlagen fehl).
- Veraltete Capability-Namen lösen hier Warnungen aus und einen harten Fehler zur Veröffentlichungszeit.
network:requestohneallowedHostslöst eine Warnung aus (erwägen Sienetwork:request:unrestricted, wenn Hosts vom Betreiber zur Laufzeit konfiguriert werden, oder listen Sie die Hosts explizit auf).- Symbol-Dimensionen –
icon.pngsollte 256×256 sein (warnt bei falscher Größe; enthält es trotzdem). - Screenshot-Limits – max. 5 Screenshots, max. 1920×1080.
Veröffentlichen
emdash plugin publish
Dies findet den neuesten .tar.gz in dist/ und lädt ihn hoch. Um den Tarball explizit anzugeben oder vor der Veröffentlichung zu bauen:
# Expliziter Tarball-Pfad
emdash plugin publish --tarball dist/my-plugin-1.0.0.tar.gz
# Erst bauen, dann veröffentlichen
emdash plugin publish --build
Authentifizierung
Beim ersten Veröffentlichen authentifiziert Sie die CLI über GitHub:
- Die CLI öffnet die GitHub-Geräteautorisierungsseite in Ihrem Browser.
- Sie geben den in Ihrem Terminal angezeigten Code ein.
- GitHub stellt ein Zugriffstoken aus.
- Die CLI tauscht es gegen ein Marktplatz-JWT (gespeichert in
~/.config/emdash/auth.json).
Das Token ist 30 Tage gültig. Nach Ablauf werden Sie bei der nächsten Veröffentlichung zur erneuten Authentifizierung aufgefordert.
Sie können die Authentifizierung separat verwalten:
emdash plugin login # anmelden ohne zu veröffentlichen
emdash plugin logout # gespeichertes Token löschen
Erstmalige Registrierung
Wenn Ihre Plugin-ID dem Marktplatz noch nicht bekannt ist, registriert emdash plugin publish sie automatisch vor dem Hochladen der ersten Version.
Versionsanforderungen
Jede veröffentlichte Version muss eine höhere semver als die letzte haben. Sie können eine vorhandene Version nicht überschreiben oder erneut veröffentlichen – erhöhen Sie die Version in beiden package.json und dem Descriptor, bevor Sie erneut veröffentlichen.
Sicherheitsaudit
Jede veröffentlichte Version durchläuft ein automatisiertes Sicherheitsaudit. Das Audit scannt backend.js und admin.js nach:
- Datenexfiltrations-Mustern
- Credential-Harvesting über Einstellungen
- Verschleiertem Code
- Ressourcenmissbrauch (Crypto-Mining usw.)
- Verdächtiger Netzwerkaktivität
Das Audit liefert ein Urteil von pass, warn oder fail, das auf der Marktplatz-Auflistung des Plugins angezeigt wird. Abhängig vom Durchsetzungslevel des Marktplatzes kann ein fail-Urteil die Veröffentlichung vollständig blockieren.
Optionen
emdash plugin publish [--tarball <path>] [--build] [--dir <path>] [--registry <url>]
| Flag | Standard | Beschreibung |
|---|---|---|
--tarball | Neuester .tar.gz in dist/ | Expliziter Tarball-Pfad |
--build | false | emdash plugin bundle vor dem Veröffentlichen ausführen |
--dir | Aktuelles Verzeichnis | Plugin-Verzeichnis (mit --build verwendet) |
--registry | https://marketplace.emdashcms.com | Marktplatz-URL |
Vollständiger Workflow
Typischer Veröffentlichungszyklus:
# 1. Nehmen Sie Ihre Änderungen vor
# 2. Erhöhen Sie die Version in src/index.ts und package.json
# 3. Bündeln und veröffentlichen
emdash plugin publish --build
Wenn Sie das Bundle zuerst inspizieren möchten:
emdash plugin bundle
tar tzf dist/my-plugin-1.1.0.tar.gz
emdash plugin publish