EmDash läuft innerhalb einer Astro-Anwendung. Die öffentlichen Seiten und das Admin-Panel teilen sich die EmDash-Runtime, Datenbank und den Medienspeicher. Sie sind Teile einer einzigen deploiten Anwendung und nicht ein Frontend und ein separater CMS-Dienst.
Die Teile einer EmDash-Site
Die folgende Tabelle zeigt, wie jeder Teil über die EmDash-Runtime verbunden ist:
| Teil | Aktion | Verbindung |
|---|---|---|
| Admin-Panel | Speichert Einträge und Medien | Sendet Änderungen an die EmDash-Runtime |
| Astro-Seiten und -Komponenten | Fragen Einträge für die öffentliche Site ab | Lesen Inhalte über die EmDash-Runtime |
| EmDash-Runtime | Wendet das Inhaltsmodell, Veröffentlichungsregeln, Abfragen, Plugins und API-Verhalten an | Liest und schreibt die Datenbank und den Medienspeicher |
| SQL-Datenbank | Speichert das Inhaltsmodell, Einträge, Benutzer, Einstellungen und andere Datensätze | Wird von der EmDash-Runtime verwendet |
| Medienspeicher | Speichert hochgeladene Dateien | Wird von der EmDash-Runtime verwendet |
Redakteure verwenden das Admin-Panel, um mit Inhalten zu arbeiten. Site-Entwickler bestimmen, wie diese Inhalte erscheinen, indem sie Astro-Seiten und -Komponenten schreiben. Beide Seiten verwenden dasselbe Inhaltsmodell: die Sammlungs- und Felddefinitionen, die jeden Eintrag beschreiben.
Die Datenbank speichert das Inhaltsmodell, Einträge, Benutzer, Einstellungen und andere CMS-Datensätze. Der Medienspeicheradapter hält hochgeladene Dateien. Ein Medienfeld in einem Eintrag verweist auf ein gespeichertes Medienelement, anstatt die Datei-Bytes in der Inhaltstabelle zu platzieren.
Was Astro konfiguriert
Eine EmDash-Site benötigt Server-Rendering, da das Admin, API-Routen und aktuelle Inhalte zur Laufzeit bereitgestellt werden. Konfigurieren Sie Astro mit output: "server" und einem Adapter für die Deployment-Plattform.
Registrieren Sie sowohl React als auch EmDash im Astro-Integrationsarray. React hydriert das Admin-Panel; wenn @astrojs/react installiert ist, aber react() im Array fehlt, verbleibt die Admin-Seite bei EmDash wird geladen….
Das folgende Node.js-Beispiel stellt eine SQLite-Datenbank und lokalen Medienspeicher bereit:
import node from "@astrojs/node";
import react from "@astrojs/react";
import { defineConfig } from "astro/config";
import emdash, { local } from "emdash/astro";
import { sqlite } from "emdash/db";
export default defineConfig({
output: "server",
adapter: node({ mode: "standalone" }),
integrations: [
react(),
emdash({
database: sqlite({ url: "file:./data.db" }),
storage: local({
directory: "./uploads",
baseUrl: "/_emdash/api/media/file",
}),
}),
],
});
Die Integration kann andere unterstützte Datenbank- und Speicheradapter verwenden. Ein lokaler Speicheradapter ist der Standard, wenn storage weggelassen wird, aber Produktions-Deployments benötigen Speicher, der über Anwendungsreleases und Instanzen hinweg bestehen bleibt. Siehe Konfiguration für die verfügbaren Adapter und Optionen.
Wie Seiten Inhalte abfragen
src/live.config.ts registriert den EmDash-Loader als eine Astro-Live-Content-Sammlung:
import { defineLiveCollection } from "astro:content";
import { emdashLoader } from "emdash/runtime";
export const collections = {
_emdash: defineLiveCollection({ loader: emdashLoader() }),
};
Seiten rufen dann getEmDashCollection() für eine Liste oder getEmDashEntry() für einen Eintrag auf. Die folgende Abfrage lädt Beiträge, wenn die Seite gerendert wird:
---
import { getEmDashCollection } from "emdash";
const { entries: posts, error } = await getEmDashCollection("posts");
if (error) throw error;
---
<ul>{posts.map((post) => <li>{post.data.title}</li>)}</ul>
Eine servergerenderte Seite führt diese Abfrage für eingehende Anfragen aus, vorbehaltlich eines von Ihnen konfigurierten Caches. Eine vorgerenderte Seite führt sie während des Builds aus und kann spätere Bearbeitungen erst nach einem weiteren Build anzeigen.
Wie sich das Modell ändert
Administratoren können Sammlungen und Felder im Admin-Panel erstellen. EmDash ändert das Datenbankschema, sodass spätere Einträge und Abfragen das neue Modell verwenden. Seed-Dateien bieten eine versionskontrollierte Möglichkeit, ein Startmodell für eine andere Umgebung zu beschreiben, und generierte TypeScript-Deklarationen helfen Entwicklern, das aktuelle Modell im Code zu verwenden.
Diese Werkzeuge beschreiben und ändern dasselbe Modell; sie erstellen keine parallelen Kopien. Lesen Sie Inhaltsmodell für den Workflow und die Datensicherheitsgrenzen.
Wie Plugins die Runtime erweitern
Plugins können auf Inhalts- und Medienereignisse reagieren und API-Routen, Einstellungen oder Admin-Oberflächen hinzufügen. Native Plugins laufen mit dem Zugriff der Host-Anwendung. Standard-Format-Plugins können in einer isolierten Runtime laufen, wenn die Site einen Sandbox-Runner konfiguriert und Berechtigungen gewährt. Lesen Sie Ein Plugin-Format wählen, bevor Sie eines installieren oder erstellen.