Du brauchst eine vollständige Redaktionsgrundlage.
Canvas, Blocks, Style Manager, Asset Manager, Layer Manager, Befehle und Speicher sind Module des Kerns und kein Rückstau. Wenn deine Roadmap derzeit vier davon enthält, ist das das Signal.
Vergleiche Craft.js und GrapesJS, verstehe die architektonischen Unterschiede, erkunde einen Live-Visual-Editor und lerne, wie man einen Craft.js-basierten Editor auf GrapesJS migriert.
Du besitzt alles rund um den Knotenbaum.
Die Bearbeitungssubsysteme kommen zusammengesetzt an.
| Paket | Version | Lizenz | Neueste Veröffentlichung | GitHub-Sterne | npm-Downloads | |
|---|---|---|---|---|---|---|
| @craftjs/core | 0.2.12 | MIT | 2025-02-14 | 8,738 | 267k/mo | Quelle |
| grapesjs | 0.23.6 | BSD-3-Clause | 2026-08-25 | 26,188 | 1.4M/mo | Quelle |
Lesen Sie aus der npm-Registry und dem GitHub API auf 2026-09-03. Sternzahlen und Download-Zahlen sind Ökosystemsignale, kein Maß dafür, welches Projekt zu Ihrem Produkt passt. Beide Repositories werden aktiv veröffentlicht und keines wird archiviert.
GrapesJS und Craft.js lösen verwandte, aber unterschiedliche Probleme. Craft.js ist ein auf React ausgerichtetes Framework zum Erstellen anpassbarer Seiteneditoren, während GrapesJS eine breitere visuelle Editor-Basis mit Komponenten, Blöcken, Styling, Assets, Speicher und Plugins bietet.
GrapesJS kann eine starke Alternative sein, wenn man mehr Editor-Infrastruktur von Werk aus möchte, besonders für HTML/CSS-basierte visuelle Editoren, SaaS-Seitenersteller, CMS-Bearbeitungsflächen und einbettbare Builder.
Es ist nicht universell besser. Wenn Ihr Produkt stark React-zentriert ist und der Editor mit einem React-Komponentenbaum arbeiten muss, ist Craft.js die direktere Lösung – und die folgenden Abschnitte sagen dies im Detail und nicht als Haftungsausschluss.
Keine Werte, da die Zeilen keine vergleichbaren Größen sind. Jede Fähigkeit ist mit ihrer Herkunft beschriftet: im Projekt enthalten, über ein Add-on erreichbar oder durch Ihren eigenen Code definiert.
| Leistungsfähigkeit | Craft.js | GrapesJS |
|---|---|---|
| Hauptfokus | Ein React-Framework zum Erstellen eigener Seiteneditoren. | Ein visuelles Editor-Framework mit bereits zusammengebauter Bearbeitungsfläche. |
| React-zuerst | IntegriertJa. Components sind React-Komponenten; der Baum ist ein React-Baum. | Add-onNein. Der Kern ist framework-agnostisch; React erscheint über @grapesjs/react. |
| Visuelles Canvas | IntegriertDeine Komponenten werden live gerendert und sind direkt selectable. | IntegriertEine isolierte Leinwand mit direkter Auswahl und inline-Textbearbeitung. |
| Individuelle Komponenten | IntegriertJede React-Komponente, beschrieben durch einen statischen Craft.js-Deskriptor. | IntegriertJeder Komponententyp, beschrieben mit einem Modell, traits und Standardeinstellungen. |
| Drag & Drop | IntegriertEnthalten ist. Die Stecker ergeben ein Element draggable und droppable. | IntegriertEnthalten ist. Components-Bewegung zwischen den Behältern auf der Leinwand. |
| Drag-and-Drop-Palette | Selbst gebautDu baust die Werkzeugkiste, die auflistet, was man heranziehen kann. | IntegriertEnthalten ist. Blocks registriert sich beim Block Manager und erscheint in einem Panel. |
| Stilmanagement | Selbst gebautAnwendungsdefiniert. Styling ist das, was deine Komponenten bereits tun. | IntegriertEnthalten ist. Der Style Manager bearbeitet CSS pro Selektor und pro Gerät. |
| Asset-Verwaltung | Selbst gebautAnwendungsdefiniert. Du stellst deinen eigenen Medienauswähler bereit. | IntegriertEnthalten sind. Der Asset Manager verwaltet Uploads und eine Medienbibliothek. |
| Serialisierung | IntegriertEnthalten ist. Der Knotenbaum serialisiert zu JSON und lädt zurück. | IntegriertEnthalten ist. Projektdaten werden in JSON serialisiert und laden zurück. |
| Speicherschicht | Selbst gebautAnwendungsdefiniert. Du entscheidest, wohin das serialisierte JSON kommt. | IntegriertEnthalten. Das Storage Manager bleibt lokal oder an deinem Endpunkt bestehen. |
| Rückgängig machen und neu machen | IntegriertEnthalten ist. Eine Rückgängig- und Wiederholungsgeschichte ist Teil des Kern-API. | IntegriertEnthalten ist. Der Undo Manager, mit Befehlen, die man an ein Panel binden kann. |
| Layer-Baum-Panel | Add-onEin offizielles Add-on-Paket rendert den Baum. | IntegriertEnthalten ist. Das Layer Manager-Panel wird mit dem Kern geliefert. |
| Plugin-Architektur | Selbst gebautKein Plugin-System. Du verfasst deine eigenen Pakete und die der Community. | IntegriertEnthalten. Ein Plugin ist eine Funktion, die das Editor empfängt und erweitert. |
| Framework-Ansatz | React-fokussiert von Natur aus. | Framework-agnostischer Kern, integriert pro Framework. |
| HTML- und CSS-Arbeitsablauf | Selbst gebautAnwendungsdefiniert. Du renderst React und erstellst selbst Markup. | IntegriertNative. Clean HTML und CSS sind die Hauptausgaben. |
| SaaS-Page-Builder | Möglich. Du baust die umgebende Schnittfläche auf. | Starke Passform. Der Großteil dieser Oberfläche ist bereits vorhanden. |
| White-Label-Editoren | Möglich. Die Schnittstelle gehört dir vom ersten Commit an. | Starke Passform. Panels, Icons, Labels und Übersetzungen sind alle austauschbar. |
Abgesehen mit der eigenen Dokumentation beider Projekte zu 2026-09-03: Craft.js 0.2.12 und GrapesJS 0.23.6. "Custom" ist eine Beschreibung, keine Kritik – für mehrere Zeilen ist es genau der Grund, warum ein Team ein unmeinungsloses Framework wählt.
Sehen Sie, was das architektonisch bedeutetDer größte Unterschied ist nicht nur die Anzahl der Funktionen. Die beiden Frameworks bieten Entwicklern unterschiedliche Ausgangspunkte für den Bau eines visuellen Editors.
Eine lineare Kette. Craft.js besitzt den Knotenbaum; jede zweite Schicht gehört dir.
Eine Kette mit Subsystemen. Die Engine kommt mit eigenen Bearbeitungsmodulen.
Craft.js beginnt niedriger. Es gibt dir einen Knotenbaum, Drag-and-Drop-Connectors, Serialisierung und Historie und nimmt bewusst keine Position bei Styling, Assets, Speicher oder den Panels rund um die Leinwand ein. Das ist eine Designentscheidung, und für ein Team, das sein gesamtes Bearbeitungserlebnis besitzen will, ist es die richtige.
GrapesJS beginnt höher. Die Leinwand, das Blocks-Panel, das Style Manager, das Asset Manager, das Layer Manager, die Befehle und das Storage Manager sind Module des Kerns, und es existiert ein Plugin API, das sie ersetzen oder erweitern kann.
Keines der beiden Frameworks ist eine Plattform. Keines von beiden stellt Hosting, Konten, Berechtigungen, Abrechnung, Multi-Tenancy oder eine Publishing-Pipeline bereit. Diese liegen außerhalb beider Rahmenbedingungen und bleiben in jedem Fall deine Verantwortung.
Die Frage ist also nicht, welches Projekt mehr Funktionen hat. Sondern welcher Ausgangspunkt dazu führt, dass du die Teile baust, die du tatsächlich besitzen möchtest.
Wenn die Schichten, die du bauen müsstest, in der ersten Spalte über Craft.js liegen, lohnt sich eine Bewertung von GrapesJS. Wenn sie darunter liegen, kauft eine Migration nur sehr wenig.
Craft.js ist ein gut gestaltetes Framework mit klarem Zweck, und mehrere Produktformen passen einfach besser dazu. Das sind keine Vorbehalte – es handelt sich um Fälle, in denen die Wahl von GrapesJS die falsche Entscheidung wäre.
Wenn alles von Routing über Zustand bis zum Rendering bereits in React existiert, bleibt ein Editor, der aus React-Primitiven gebaut ist, in einem mentalen Modell. Nichts muss eine Grenze überschreiten.
Craft.js bearbeitet einen echten React-Baum. Wenn deine Nutzer deine React-Komponenten anordnen – nicht Markup – dann ist diese Entsprechung der gesamte Wert, und es ist nichts, was ein HTML-First-Modell reproduziert.
Craft.js legt keine Panels, Toolbars oder eine Einstellungsfläche vor. Ein Team mit starken Designansichten bekommt einen Neuanfang statt etwas, das man überschreiben könnte.
Memoisierung, Kontext, Spannungsgrenzen, Render-Planung: Wenn diese Details wichtig sind, behalten Sie den bearbeitbaren Baum innerhalb von React unter Ihrer Kontrolle.
Ein funktionierender Editor mit echten Nutzern und echten Inhalten ist ein Vorteil. Die Kosten für einen Ersatz werden selten allein durch eine Feature-Liste gerechtfertigt.
Wenn dein Resolver, deine Einstellungspanels und deine Inhaltspipeline alle das Craft.js-Node-Modell annehmen, ist diese Kopplung tief und das Reproduzieren an anderer Stelle ist echte Arbeit.
In solchen Situationen kann der Ersatz von Craft.js unnötige Migrationsarbeit verursachen.
Siehe die vollständige EntscheidungsmatrixDie untenstehenden Signale beziehen sich darauf, was du sonst bauen müsstest. Jede Karte sammelt einige davon; wenn mehrere dein Projekt beschreiben, lohnt sich die Bewertung für dich.
Canvas, Blocks, Style Manager, Asset Manager, Layer Manager, Befehle und Speicher sind Module des Kerns und kein Rückstau. Wenn deine Roadmap derzeit vier davon enthält, ist das das Signal.
GrapesJS bearbeitet ein Dokument und erzeugt saubere Markups und Stylesheets. Wenn das Artefakt, das deine Nutzer erstellen, außerhalb deiner React-App gerendert werden muss, ist das ein nativer Workflow und kein Exportschritt, den du schreibst.
Die Arbeit Ihres Teams fließt in Konten, Pläne, Vorlagen und Veröffentlichungen – nicht in die Neugestaltung eines Style-Panels. GrapesJS ist die Bearbeitungsebene innerhalb dieses Produkts, niemals das Produkt selbst.
SaaS-Seitenbau-LeitfadenDer Editor mountet in ein DOM-Element, das du steuerst, innerhalb einer App, die du nicht unbedingt selbst geschrieben hast. Genau diese Einschränkung ist es, worum es im einbettbaren Guide geht.
Leitfaden für einbettbare BuilderPanels, Icons, Labels, Übersetzungen und die gesamte visuelle Sprache sind austauschbar, sodass der Editor die Marke Ihres Kunden statt Ihrer eigenen tragen kann.
White-Label-LeitfadenE-Mails verlangen tabellenbasiertes Markup und integriertes CSS – ein anderes Dokumentmodell mit derselben Bearbeitungsfläche. Dafür gibt es Presets.
Leitfaden für E-Mail-EditorenVergleiche nicht nur Funktionen. Probiere den Editor selbst aus – ziehe einen Block hinein, wähle ein Element aus, style es neu und stelle die Leinwand auf eine Handybreite um.
Die offizielle Demo plus drei veröffentlichte Editoren vom Marktplatz. Jeder lädt per Klick, in seinem eigenen Rahmen.
Open Full DemoDer Standard-GrapesJS-Editor ohne Plugins und ohne Designsystem. Das ist das, was der Core dir gibt, bevor du irgendetwas konfigurierst.
Lädt in einem Bild auf dieser Seite.
Beide Projekte nennen das, was ein Nutzer mit sich herumschleppt, eine "Komponente", aber die beiden Definitionen sind nicht austauschbar. Das ist der Unterschied, der entscheidet, wie viel Arbeit eine Migration ist.
Eine React-Komponente, die der Editor über Steckverbinder ansteuert. Seine editierbare Oberfläche sind seine React-Requisiten.
Eine Definition im eigenen Dokumentmodell des Editors. Seine editierbare Oberfläche ist traits, Attribute und Styles.
Eine React-Komponente mit einem Craft.js-Deskriptor wird mit einem Modell zu einem registrierten Komponententyp und setzt standardmäßig ein. Das erzeugte Aufzeichnungsmaterial wird in dieses Modell übertragen.
Props, die ein Editor-Nutzer ändern könnte, werden zu traits. Props, dass nur deine Codesets zu Attributen oder festen Modelleigenschaften werden.
Der serialisierte Knotenbaum wird zu Projektdaten. Beide sind JSON, aber die Strukturen unterscheiden sich, daher ist dies eine Transformation, die man schreibt und testet.
Die Einstellungs-Panels, die du in React geschrieben hast, werden durch das integrierte Trait-Panel ersetzt, plus benutzerdefinierte Befehle und Panels, bei denen du Verhalten brauchst, das der Core nicht hat.
Das ist eine konzeptionelle Kartierung, kein automatischer Konverter. Kein Tool liest einen Craft.js-Resolver und gibt GrapesJS-Komponententypen aus – die oben beschriebene Entsprechung ist das, was man einmal pro Komponententyp implementiert.
Die gleiche Idee – ein hero-Abschnitt mit einer editierbaren Überschrift und Beschreibung – auf jeder Seite definiert. Lies sie als zwei Definitionen eines Konzepts, nicht als Vorher-Nachher-Folgen derselben Datei.
// Craft.js: a component is a React component plus a `craft` descriptor.
// The editor drives it through connectors from useNode().
import { useNode } from '@craftjs/core';
export const Hero = ({ title, description }) => {
const { connectors: { connect, drag } } = useNode();
return (
<section ref={(ref) => connect(drag(ref))} className="hero">
<h1>{title}</h1>
<p>{description}</p>
</section>
);
};
Hero.craft = {
props: {
title: 'Build faster',
description: 'Create beautiful pages',
},
related: {
// The panel that edits those props is a React component you write.
settings: HeroSettings,
},
};// GrapesJS: a component type owns its markup and its editable traits.
// Traits are the closest analogue to Craft.js props.
editor.Components.addType('hero', {
model: {
defaults: {
tagName: 'section',
attributes: { class: 'hero' },
traits: [
{ name: 'title', type: 'text', changeProp: true },
{ name: 'description', type: 'text', changeProp: true },
],
components: [
{ tagName: 'h1', type: 'text', content: 'Build faster' },
{ tagName: 'p', type: 'text', content: 'Create beautiful pages' },
],
},
},
});
// A block is what makes the type draggable from the panel. Craft.js derives
// the equivalent from your toolbox; in GrapesJS it is a separate registration.
editor.Blocks.add('hero', {
label: 'Hero',
category: 'Sections',
content: { type: 'hero' },
});
// The trait panel edits those traits. You do not write it.Component-Definitionen machen nur die Hälfte davon aus. Alles, was Ihre Nutzer bereits erstellt haben, wird im Craft.js-Knotenformat gespeichert, und das Verschieben bedeutet, diesen Baum zu durchlaufen und die Definitionen zu emittieren, die Ihre neuen Komponententypen verstehen.
// Craft.js persists `query.serialize()` — a JSON map of nodes keyed by id,
// each with { type: { resolvedName }, props, nodes }. Migrating it means
// walking that map and emitting the GrapesJS component definitions your new
// types understand: a transform you write once, per component type.
const toGrapesJs = {
Hero: ({ title, description }) => ({ type: 'hero', title, description }),
// …one entry per resolver entry in your Craft.js editor
};
function craftNodeToGjs(nodes, id) {
const node = nodes[id];
const map = toGrapesJs[node.type.resolvedName];
if (!map) throw new Error(`Unmapped Craft.js component: ${node.type.resolvedName}`);
return {
...map(node.props),
components: (node.nodes ?? []).map((child) => craftNodeToGjs(nodes, child)),
};
}
const nodes = JSON.parse(craftSerializedJson);
editor.setComponents(craftNodeToGjs(nodes, 'ROOT').components);Beide Beispiele sind anschaulich. Sie zeigen die Form der Abbildung und die Form der Transformation; keine von beiden ist eine Drop-in-Migration, und in keinem der beiden Projekte generiert sie für Sie.
Drei grobe Ebenen. Keine davon hat eine Dauer, denn die ehrliche Antwort hängt ganz von deinem Code ab – und eine Seite, die dir eine Zahl verspricht, die sie nicht kennen kann, hilft dir nicht bei der Planung.
Eine Handvoll Komponententypen, eine kleine Einstellungsfläche und Inhalte, die bisher noch nicht viele Variationen angesammelt haben.
Du bist wahrscheinlich hier, wenn
Meistens eine relativ fokussierte Migration.
Ein echter Editor mit eigenen Panels, einer Template-Bibliothek, gespeicherten Dokumenten und einem Komponentenset, der zum Produkt angepasst wurde.
Du bist wahrscheinlich hier, wenn
Erfordert Komponenten- und Datenmapping.
Components, die vom App-Kontext, dem Verhalten der Editoren an nicht offensichtlichen Stellen und Geschäftsregeln, die in das Bearbeitungserlebnis eingebettet sind, abhängen.
Du bist wahrscheinlich hier, wenn
Erfordert eine Architekturüberprüfung und eine schrittweise Migration.
Die Migrationskomplexität hängt davon ab, wie tief die vorhandene App mit Craft.js gekoppelt ist.
Arbeite die Checkliste durchDie Reihenfolge, in der eine Migration tatsächlich verläuft, gruppiert in vier Phasen. Nützlich, egal ob man es selbst macht oder jemandem übergibt.
15-SchritteBevor etwas wieder aufgebaut wird, finde heraus, was tatsächlich bewegt werden muss.
Component-Typen, die Palette und die Steuerungen, die Ihre Nutzer erwarten.
Vorhandene Inhalte, wo sie gespeichert sind und auf welche Medien es sich bezieht.
Beweise, dass es funktioniert, und verschiebe dann die Leute ohne harten Cutover.
Die Boxen sind ein druckbarer Plan, kein gespeicherter Zustand – hier wird in deinem Browser nichts gespeichert. Kopiere die Schritte in den Tracker, den dein Team bereits verwendet.
Sprich mit jemandem darüber, der das schon gemacht hat.Nicht automatisch.
Craft.js und GrapesJS verwenden unterschiedliche Komponenten- und Editor-Modelle. Eine Craft.js-Komponente ist eine React-Komponente, die der Editor über Steckverbinder ansteuert; ein GrapesJS-Komponententyp ist eine Definition im eigenen Dokumentmodell des Editors. Es gibt keinen Adapter, der das eine in das andere umwandelt, und jede Seite, die etwas anderes sagt, beschreibt die Arbeit, die du später entdecken wirst.
Nimm das Markup und das Styling, das deine React-Komponente erzeugt, und drücke es als Komponententyp mit traits aus. Das ist der Standardpfad und es ist meist weniger Aufwand, als es klingt, weil das Markup bereits existiert.
Kosten: Eine Definition pro Komponententyp, von Hand geschrieben und wie jeder andere Code überprüft.
Preisregeln, Validierung, Datenabruf und Formatierung gehören selten dem Editor. Hebt man sie in Module hoch, die der Editor aufruft, überstehen sie den Umzug unberührt.
Kosten: Dafür muss zuerst Logik und Rendering getrennt werden, was sich oft trotzdem lohnt.
Manche Komponenten benötigen tatsächlich React zur Renderzeit. Diese können in einen Container gerendert werden, den der Editor besitzt, wobei der Editor das Ergebnis als eine Komponente behandelt.
Kosten: Die teuerste Option. Nutze es für die wenigen Komponenten, die es brauchen, nicht als allgemeine Strategie.
Die editierbare Oberfläche ist das, worauf deine Nutzer Wert legt. Die Zuordnung jedes editierbaren Attributs zu einem Merkmal oder Attribut bewahrt das Erlebnis, selbst wenn die darunterliegende Implementierung völlig neu ist.
Kosten: Immobiliennamen und -typen müssen abgestimmt werden, und Defaults müssen wiederhergestellt werden.
Ein Vorteil der Wahl von GrapesJS ist, dass man den Editor durch Plugins erweitern kann, anstatt jede Funktion von Grund auf neu zu implementieren. Dies sind echte Einträge aus dem GJS.Market-Katalog – Namen, Preise und Bilder stammen direkt vom Marktplatz, sodass hier nichts von dem abweichen kann, was tatsächlich zum Verkauf steht.
Checkliste Schritte 1 bis 5. Fertige Komponenten- und Blocksets, von denen du anfangen kannst, anstatt jeden Typ von Hand zu definieren.
Durchstöbern Sie den BereichEin Grundsatz von Strukturblöcken, um die Palette zu starten.
Erzeugt Komponententypen aus vorhandenem Aufzeichnungsmaterial.
Geben Sie Komponenten mit editierbaren Eigenschaften ein, bereit für das Trait-Panel.
Ermöglicht es deinem Team, sein eigenes Blockset zu registrieren, ohne die Sanitärinstallation schreiben zu müssen.
Checkliste Schritt 6. Inline Rich Text Editing, was in einem Craft.js-Projekt fast immer eine Komponente ist, die jemand aus deinem Team geschrieben hat.
Durchstöbern Sie den BereichTauscht die integrierte Textbearbeitung gegen CKEditor 5 aus.
Tauscht die integrierte Textbearbeitung gegen TinyMCE 6 aus.
Tauscht die integrierte Textbearbeitung gegen Froala aus.
Erweitert die integrierte Textleiste um weitere Formatierungsaktionen.
Wenn deine React-Komponenten auf einem Utility oder Component Framework basieren, kann dasselbe System die Blöcke sichern, die deine Nutzer einziehen.
Durchstöbern Sie den BereichTailwind-basierte Blöcke, die einem utility-first-Designsystem entsprechen.
Rendert Tailwind-Klassen innerhalb der Canvas.
Bootstrap 5 Layout- und Inhaltsblöcke.
Bootstrap 4 Raster- und Inhaltsblöcke für ältere Systeme.
Checkliste Schritte 8 bis 10. Wo Dokumente gespeichert werden und wo hochgeladene Medien hingehören.
Durchstöbern Sie den BereichEs hält Dokumente im Browser – nützlich für Prototypen und Offline-Arbeiten.
Speichert Projektdaten in Cloud Firestore.
Lagert hochgeladene Medien in Firebase.
Verwendet Cloudinary als Medienbibliothek hinter dem Asset Manager.
Jedes dieser Produkte ist ein anderes Produkt, und jede hat ihren eigenen Leitfaden mit der Architektur, den Kompromissen und den anwendbaren Plugins.
Baue einen visuellen Editor direkt in deinem SaaS-Produkt.
Lies den LeitfadenEinen visuellen Editor in eine bestehende App einbetten.
Lies den LeitfadenBaue React-basierte Anwendungen rund um GrapesJS.
Lies den LeitfadenErstellen Sie visuelle Workflows für die Bearbeitung von E-Mails mit tabellensicheren Ausgaben.
Lies den LeitfadenSchaffen Sie ein Marken-Bearbeitungserlebnis für Ihre Kunden.
Lies den LeitfadenFügen Sie visuelle Bearbeitung in ein headless-content-System hinzu.
Lies den Leitfaden@grapesjs/reactEine offizielle Wrapper-Komponente oder eine einfache Referenz und einen Effekt.Next.jsnext/dynamicNur für den Client, lud träge, damit sie aus der ersten Nutzlast herausbleibt.VueonMounted()Starte ihn am montierten Haken, zerstöre ihn, wenn das Bauteil abgebaut wird.AngularngAfterViewInit()Starte es, nachdem die Ansicht initialisiert ist, außerhalb der Änderungserkennung.npm install grapesjs @grapesjs/reactimport grapesjs from 'grapesjs';
import GjsEditor from '@grapesjs/react';
import 'grapesjs/dist/css/grapes.min.css';
// GrapesJS owns an iframe canvas and touches `window`, so it mounts on the
// client. In Next.js, load this from a client component.
export default function VisualEditor() {
return (
<GjsEditor
grapesjs={grapesjs}
options={{
height: '100vh',
storageManager: { type: 'remote', autosave: true },
}}
onEditor={(editor) => {
// Register the component types you mapped from your Craft.js
// components here.
}}
/>
);
}Die Integrationsschicht ist absichtlich dünn. Dein Framework besitzt die Seite, GrapesJS besitzt die Leinwand, und deine Komponententypen werden registriert, sobald der Editor existiert.
Wenn du entschieden hast, dass GrapesJS passt, gibt es immer noch eine zweite Entscheidung: Trage den bestehenden Editor rüber oder baue einen neuen daneben. Sie kosten unterschiedliche Dinge.
Tragen Sie den Komponentensatz, die Vorlagen und den gespeicherten Inhalt mit und halten Sie das Produkt für die Nutzer kontinuierlich.
Wähle Migration, wenn
Mehr Kartierungsarbeit am Anfang, deutlich weniger Störungen für diejenigen, die bereits auf den Editor angewiesen sind.
Siehe die ChecklisteBauen Sie den neuen Editor als eigenständiges Werk auf, bringen Sie den Inhalt durch, sobald er fertig ist, und nutzen Sie die Gelegenheit, um das zu korrigieren, was Sie sonst übernehmen würden.
Überlege, neu anzufangen, wenn
Weniger Kompatibilitätsarbeit, aber die Inhaltstransformation muss trotzdem geschrieben werden, falls Dokumente bereits existieren.
Probier zuerst den Editor ausEine Anforderung pro Reihe, ein Startpunkt. Vier davon zeigen auf Craft.js, was die anderen fünf lesenswert macht.
| Deine Anforderung | Besserer Ausgangspunkt |
|---|---|
| Ein Editor, der auf einem React-Komponentenbaum arbeitet | Craft.js |
| Eine vollständige Grundlage für visuelle Editoren | GrapesJS |
| Ein HTML- und CSS-Seitenbauer | GrapesJS |
| Eine tief React-orientierte Architektur | Craft.js |
| Integrierte visuelle Bearbeitungswerkzeuge | GrapesJS |
| Eine hochgradig angepasste React-Editor-Oberfläche | Craft.js |
| Ein plugin-gesteuertes Editor-Ökosystem | GrapesJS |
| Ein SaaS-Page-Builder | GrapesJS |
| Eine bestehende, ausgereifte Craft.js-Anwendung | Bewerten Sie zuerst die Migrationskosten |
Es gibt keinen universellen Gewinner. Die richtige Wahl hängt von der Editor-Architektur und den Produktanforderungen ab.
GJS.Market erstellt und migriert GrapesJS-Editoren. Wenn du die Checkliste lieber nicht allein durchgehen möchtest, sind dies die Phasen, die ein Engagement abdeckt – und die erste ist eine Bewertung, die durchaus zu dem Schluss kommen kann, dass es die richtige Lösung ist, bei Craft.js zu bleiben.
Architekturbewertung
Wir lesen den bestehenden Editor, ermitteln, wie tief er mit Craft.js verknüpft ist, und sagen klar, ob eine Migration sich lohnt.
Component und Vorlagenmapping
Jeder Komponententyp wird einer GrapesJS-Definition zugeordnet, deren editierbare Eigenschaften in traits umgewandelt werden, und bestehende Vorlagen werden parallel dazu abgebildet.
Daten- und Asset-Migration
Die Umwandlung von serialisierten Craft.js-Inhalten zu Projektdaten wird geschrieben und mit Ihren echten Dokumenten getestet, und die Medien werden mitbewegt.
Benutzerdefinierte Editor-Logik und Plugins
Verhalten, das im Kern kein Äquivalent hat, wird als Befehle, Panels oder Plugins neu aufgebaut, sodass es wartbar bleibt und nicht nur gepatcht wird.
Speicher und Veröffentlichung
Der Storage Manager ist mit deinem Backend verbunden und der Veröffentlichungspfad ist End-to-End-Verbindung.
Parallelbetrieb und Tests
Beide Editoren arbeiten Seite an Seite mit demselben Inhalt, damit der neue überprüft werden kann, bevor jemand darauf umgestellt wird.
Es kommt darauf an, was du baust. GrapesJS ist die nächstgelegene Alternative für Teams, die eine visuelle Editor-Basis mit bereits zusammengebauten Komponenten, Blöcken, Styling, Assets und Speicher wollen. Puck ist im Geiste näher an Craft.js, wenn du React zuerst gestalten möchtest. Es gibt keine einzige beste Antwort, weshalb diese Seite eher ein Vergleich als eine Empfehlung ist.
Kein Drop-in-Modell. Die beiden haben unterschiedliche Komponentenmodelle, daher bedeutet Verschieben, deine Komponenten neu zu definieren und gespeicherte Inhalte zu transformieren. GrapesJS ist ein Ersatz im Sinne davon, dass es denselben Zweck erfüllen kann, nicht im Sinne davon, dass du die Abhängigkeit tauschen kannst.
Craft.js ist ein React-Framework zum Erstellen von Seiteneditoren: Es besitzt einen Knotenbaum deiner React-Komponenten und überlässt Styling, Assets, Speicher und die umgebende Benutzeroberfläche dir. GrapesJS ist ein visuelles Editor-Framework, dessen Kern bereits eine Leinwand, Blöcke, einen Style Manager, einen Asset Manager, einen Layer Manager, Befehle, Speicher und ein Plugin-System umfasst.
Nein. Der Kern ist framework-agnostisch und hat keine React-Abhängigkeit. Es gibt ein offizielles React-Wrapper-Paket, aber intern pflegt GrapesJS sein eigenes Dokumentmodell statt eines React-Baums.
Ja. Ein offizieller Wrapper mountet den Editor als React-Komponente, und du kannst ihn gleichermaßen selbst von einer Referenz und einem Effekt starten. Die React-App hostet den Editor; der Editor besitzt weiterhin seine eigene Canvas.
Nicht automatisch. Eine Craft.js-Komponente ist eine React-Komponente, die der Editor über Anschlüsse ansteuert; ein GrapesJS-Komponententyp ist eine Definition im eigenen Modell des Editors. Die meisten Teams bauen die visuelle Definition neu auf, lassen die Geschäftslogik in Modulen außerhalb des Editors und fügen eine Integrationsschicht nur für die Komponenten hinzu, die tatsächlich React zum Rendering benötigen.
Ja, indem man sie zuweist, statt sie zu konvertieren. Jede Craft.js-Komponente wird zu einem registrierten Komponententyp, ihre editierbaren Requisiten zu traits, und das gerenderte Markup wird in das Modell des Typs übertragen. Es handelt sich um handschriftliche Arbeit, ungefähr eine Definition pro Komponententyp.
Props: Ein Editor-Nutzer kann die Map auf traits ändern. Props nur dein Code setzt Attribute oder feste Modelleigenschaften zu. Der Anwendungszustand, den eine Komponente zum Render liest, hat kein direktes Äquivalent und muss normalerweise aus der Komponente heraus in den Code um den Editor herum wechseln.
Ja, sobald die Komponententypen existieren. Eine Vorlage ist gespeicherter Inhalt, also durchläuft sie dieselbe Transformation wie jedes andere Dokument: Durchlaufen Sie den serialisierten Knotenbaum, emittieren Sie die entsprechenden GrapesJS-Komponenten und speichern Sie das Ergebnis als Vorlage im neuen System.
Ja, mit einer Transformation schreibst du. Craft.js speichert eine JSON-Karte von Knoten, von denen jeder einen aufgelösten Komponentennamen, seine Props und seine Kinder trägt. GrapesJS lädt Projektdaten in seiner eigenen JSON-Form. Beide sind JSON, daher ist die Migration ein Tree Walk plus eine Mapping-Funktion pro Komponententyp.
Es ist eine gängige Verwendung dafür. GrapesJS stellt die Bearbeitungsebene bereit; Konten, Pläne, Berechtigungen, Vorlagen, Hosting und Veröffentlichung bleiben Ihre Erstellung. Der SaaS-Seitenbau-Leitfaden behandelt, wie sich diese Verantwortlichkeiten aufteilen.
Ja. GrapesJS ist nur clientsbasiert – es berührt Browser-Globals beim Start – wird also träge geladen und außerhalb des Server-Renderings gerendert. Das hält außerdem etwa 300 KB von deiner ersten Nutzlast fern.
Ja. Das Paket liefert eigene Typdefinitionen aus, daher ist kein separates Typpaket erforderlich. Der TypeScript-Guide deckt die Versionsuntergrenze und die Typen, die deklariert, aber nicht exportiert werden.
Ja. Panels, Buttons, Icons, Labels und Übersetzungen sind alle austauschbar, und das Plugin API kann Teile der Benutzeroberfläche komplett entfernen oder neu aufbauen. Das macht es als Editor sinnvoll, der in das Markenprodukt eines anderen eingebettet ist.
Ja. Ein Plugin ist eine Funktion, die den Editor empfängt und Komponententypen, Blöcke, Befehle, Panels oder Speicheradapter registriert. Dies ist der wichtigste Erweiterungsmechanismus, auf dem die Marktplatz-Listings basieren.
GJS.Market ist ein Katalog von GrapesJS-Plugins, Blöcken, Presets und Integrationen, organisiert nach Katalogabschnitten. Der Plugins-Bereich dieser Seite zeigt aktuelle Angebote mit aktuellen Preisen.
Migrieren Sie, wenn Sie viele Vorlagen, Nutzer haben, die auf den aktuellen Editor angewiesen sind, oder Geschäftslogik, die es wert ist, mitgeführt zu werden. Fangen Sie neu an, wenn der Craft.js-Editor noch klein ist, kaum gespeicherte Inhalte vorhanden sind oder sich die Komponentenarchitektur ohnehin ändert. So oder so benötigen bestehende Dokumente weiterhin eine Transformation.
Ja. Ein Engagement beginnt mit einer Architekturbewertung und umfasst dann Komponenten- und Template-Mapping, Daten- und Asset-Migration, benutzerdefinierte Editor-Logik, Speicherung und Veröffentlichung sowie eine Phase des parallelen Laufens. Die Bewertung kann zu dem Schluss kommen, dass das Verbleiben bei Craft.js die richtige Lösung ist.
Wenn dein aktueller Editor zu viel individuelle Infrastruktur benötigt, solltest du GrapesJS mit einem echten Projekt vergleichen. Beginne mit dem Editor, erweitere ihn mit Plugins und passe die Architektur rund um dein Produkt an.
Verwenden Sie den Editor, der weiter oben auf dieser Seite läuft, und nehmen Sie dann die offizielle Demo und die Marktplatz-Demos für eine längere Laufzeit.
Öffnen Sie den EditorComponents, Blöcke, Rich Text Editing, Designsysteme, Speicher und Assets – Erweiterungen, die Arbeiten ersetzen, die du sonst schreiben würdest.
Entdecken Sie PluginsZuerst eine Bewertung, dann Komponentenkartierung, Datenmigration und paralleles Laufen. Eine ehrliche Antwort einzubeziehen, falls sich Migration nicht lohnt.
Migrationshilfe anfordern