Bündeln und Veröffentlichen

Auf dieser Seite

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.json mit sowohl einem "." Export (dem Descriptor) als auch einem "./sandbox" Export (dem Runtime-Entry) hat.
  • format: "standard" im Descriptor verwendet.
  • Eine eindeutige id und eine gültige semver version hat.
  • Seine capabilities und allowedHosts im Descriptor korrekt deklariert.

Bundle-Format

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

DateiErforderlichBeschreibung
manifest.jsonJaPlugin-Metadaten, extrahiert aus Descriptor und Sandbox-Entry
backend.jsJaGebündelter Sandbox-Code (eigenständiges ES-Modul)
admin.jsNeinGebündelter Admin-UI-Code (nur wenn Block Kit-Interaktionen JS ausliefern)
README.mdNeinPlugin-Dokumentation
icon.pngNeinPlugin-Symbol (256×256 PNG)
screenshots/NeinBis 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:

  1. Ihre package.json lesen, um Einstiegspunkte zu finden.
  2. Den Descriptor-Entry erstellen, um ID, Version, Capabilities und Admin-Konfiguration zu extrahieren.
  3. backend.js aus dem "./sandbox" Export bündeln – minifiziert, tree-shaken, vollständig eigenständig.
  4. admin.js bündeln, falls ein "./admin" Export existiert.
  5. Assets sammeln (README, Symbol, Screenshots).
  6. Das Bundle validieren (Größenbeschränkungen, keine Node.js-Built-ins in backend.js, Capability-Checks).
  7. {id}-{version}.tar.gz in dist/ 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" }
	}
}
ExportZweckGebaut als
"."Descriptor – wird verwendet, um das Manifest zu extrahierenExternals: emdash, @emdash-cms/*
"./sandbox"Runtime-Code (hooks, routes), der in der Sandbox ausgeführt wirdVollstä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>]
FlagStandardBeschreibung
--dirAktuelles VerzeichnisPlugin-Quellverzeichnis
--outDir, -odistAusgabeverzeichnis 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 kann fs, path, child_process usw. 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:request ohne allowedHosts löst eine Warnung aus (erwägen Sie network:request:unrestricted, wenn Hosts vom Betreiber zur Laufzeit konfiguriert werden, oder listen Sie die Hosts explizit auf).
  • Symbol-Dimensionenicon.png sollte 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:

  1. Die CLI öffnet die GitHub-Geräteautorisierungsseite in Ihrem Browser.
  2. Sie geben den in Ihrem Terminal angezeigten Code ein.
  3. GitHub stellt ein Zugriffstoken aus.
  4. 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>]
FlagStandardBeschreibung
--tarballNeuester .tar.gz in dist/Expliziter Tarball-Pfad
--buildfalseemdash plugin bundle vor dem Veröffentlichen ausführen
--dirAktuelles VerzeichnisPlugin-Verzeichnis (mit --build verwendet)
--registryhttps://marketplace.emdashcms.comMarktplatz-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