आपको एक पूर्ण संपादन नींव की आवश्यकता है
कैनवास, Blocks, Style Manager, Asset Manager, Layer Manager, कमांड और स्टोरेज बैकलॉग के बजाय कोर के मॉड्यूल हैं। यदि आपके रोडमैप में वर्तमान में उनमें से चार हैं, तो यह संकेत है।
Craft.js और GrapesJS की तुलना करें, वास्तुशिल्प अंतर को समझें, एक लाइव विज़ुअल संपादक का पता लगाएं, और Craft.js-आधारित संपादक को GrapesJS में माइग्रेट करना सीखें।
आप नोड ट्री के आसपास सब कुछ के मालिक हैं।
संपादन उप-प्रणाली इकट्ठे होते हैं।
| पैकेज | विवरण | लाइसेंस | नवीनतम रिलीज़ | GitHub सितारे | npm डाउनलोड | |
|---|---|---|---|---|---|---|
| @craftjs/core | 0.2.12 | MIT | 2025-02-14 | 8,738 | 267k/mo | मूल |
| grapesjs | 0.23.6 | BSD-3-Clause | 2026-08-25 | 26,188 | 1.4M/mo | मूल |
npm रजिस्ट्री और GitHub API से 2026-09-03 पर पढ़ें। स्टार काउंट और डाउनलोड के आंकड़े पारिस्थितिकी तंत्र के संकेत हैं, न कि यह माप कि कौन सी परियोजना आपके उत्पाद के लिए उपयुक्त है। दोनों रिपॉजिटरी सक्रिय रूप से प्रकाशित हैं और न ही संग्रहीत हैं।
GrapesJS और Craft.js संबंधित लेकिन अलग-अलग समस्याओं को हल करते हैं। Craft.js अनुकूलन योग्य पृष्ठ संपादकों के निर्माण के लिए एक React-केंद्रित ढांचा है, जबकि GrapesJS घटकों, ब्लॉक, स्टाइलिंग, संपत्ति, भंडारण और प्लगइन्स के साथ एक व्यापक दृश्य संपादक नींव प्रदान करता है।
GrapesJS एक मजबूत विकल्प हो सकता है जब आप अधिक संपादक बुनियादी ढांचा चाहते हैं, विशेष रूप से HTML/CSS-आधारित विज़ुअल संपादकों, SaaS पेज बिल्डरों, CMS संपादन सतहों और एम्बेड करने योग्य बिल्डरों के लिए।
यह सार्वभौमिक रूप से बेहतर नहीं है। यदि आपका उत्पाद गहराई से React-केंद्रित है और संपादक को React घटक वृक्ष पर काम करना है, तो Craft.js अधिक प्रत्यक्ष फिट है - और नीचे दिए गए अनुभाग अस्वीकरण के बजाय विस्तार से ऐसा कहते हैं।
कोई स्कोर नहीं, क्योंकि पंक्तियाँ तुलनीय मात्रा नहीं हैं। प्रत्येक क्षमता को लेबल किया जाता है कि यह कहां से आता है: परियोजना में शामिल, ऐड-ऑन के माध्यम से पहुंच योग्य, या आपके स्वयं के कोड द्वारा परिभाषित।
| योग्यता | Craft.js | GrapesJS |
|---|---|---|
| प्राथमिक फोकस | अपने स्वयं के पृष्ठ संपादकों के निर्माण के लिए एक React ढांचा। | संपादन सतह के साथ एक दृश्य संपादक ढांचा पहले से ही इकट्ठा किया गया है। |
| React-पहला | अंतर्निहितहाँ। Components React घटक हैं; पेड़ एक React पेड़ है। | ऐड-ऑननहीं। कोर ढांचा-अज्ञेयवादी है; React @grapesjs/react के माध्यम से आता है। |
| दृश्य कैनवास | अंतर्निहितआपके घटक लाइव प्रस्तुत करते हैं और सीधे selectable होते हैं। | अंतर्निहितप्रत्यक्ष चयन और इनलाइन पाठ संपादन के साथ एक अलग कैनवास। |
| कस्टम घटक | अंतर्निहितकोई भी React घटक, एक स्थिर Craft.js वर्णनकर्ता द्वारा वर्णित है। | अंतर्निहितकोई भी घटक प्रकार, एक मॉडल के साथ वर्णित, traits और डिफ़ॉल्ट। |
| खींचें और छोड़ें | अंतर्निहितशामिल। कनेक्टर एक तत्व draggable और droppable बनाते हैं। | अंतर्निहितशामिल। Components कैनवास पर कंटेनरों के बीच चलते हैं। |
| ड्रैग-एंड-ड्रॉप पैलेट | रिवाजआप टूलबॉक्स बनाते हैं जो सूचीबद्ध करता है कि क्या खींचा जा सकता है। | अंतर्निहितशामिल। Blocks Block Manager के साथ पंजीकरण करें और एक पैनल में दिखाई दें। |
| शैली प्रबंधन | रिवाजअनुप्रयोग-परिभाषित। स्टाइलिंग वह है जो आपके घटक पहले से ही करते हैं। | अंतर्निहितशामिल। Style Manager प्रति चयनकर्ता और प्रति डिवाइस CSS संपादन करता है। |
| संपत्ति प्रबंधन | रिवाजअनुप्रयोग-परिभाषित। आप अपने स्वयं के मीडिया पिकर की आपूर्ति करते हैं। | अंतर्निहितशामिल। Asset Manager अपलोड और एक मीडिया लाइब्रेरी को संभालता है। |
| क्रमबद्धता | अंतर्निहितशामिल। नोड ट्री JSON तक क्रमबद्ध होता है और वापस लोड होता है। | अंतर्निहितशामिल। प्रोजेक्ट डेटा JSON तक क्रमबद्ध होता है और वापस लोड होता है। |
| भंडारण परत | रिवाजआवेदन-परिभाषित। आप तय करते हैं कि क्रमबद्ध JSON कहाँ जाता है। | अंतर्निहितशामिल। Storage Manager स्थानीय रूप से या आपके समापन बिंदु तक बना रहता है। |
| पूर्ववत करें और फिर से करें | अंतर्निहितशामिल। एक पूर्ववत करें और फिर से करें इतिहास कोर API का हिस्सा है। | अंतर्निहितशामिल। Undo Manager, कमांड के साथ आप एक पैनल से जुड़ सकते हैं। |
| परत वृक्ष पैनल | ऐड-ऑनएक आधिकारिक ऐड-ऑन पैकेज पेड़ को प्रस्तुत करता है। | अंतर्निहितशामिल। Layer Manager पैनल कोर के साथ आता है। |
| Plugin वास्तुकला | रिवाजकोई प्लगइन सिस्टम नहीं। आप अपने स्वयं के पैकेज और समुदाय की रचना करते हैं। | अंतर्निहितशामिल। एक प्लगइन एक फ़ंक्शन है जो Editor प्राप्त करता है और इसे बढ़ाता है। |
| फ्रेमवर्क दृष्टिकोण | React-डिजाइन द्वारा केंद्रित। | फ्रेमवर्क-अज्ञेयवादी कोर, प्रति फ्रेमवर्क एकीकृत। |
| HTML और CSS वर्कफ़्लो | रिवाजआवेदन-परिभाषित। आप React प्रस्तुत करते हैं और स्वयं मार्कअप तैयार करते हैं। | अंतर्निहितदेशी। स्वच्छ HTML और CSS प्राथमिक आउटपुट हैं। |
| SaaS पेज बिल्डर्स | संभव। आप आसपास की संपादन सतह का निर्माण करते हैं। | मजबूत फिट। उस सतह का अधिकांश हिस्सा पहले से ही है। |
| व्हाइट-लेबल संपादक | संभव। इंटरफ़ेस पहली प्रतिबद्धता से आपका है। | मजबूत फिट। पैनल, आइकन, लेबल और अनुवाद सभी बदले जा सकते हैं। |
2026-09-03 पर दोनों परियोजनाओं के स्वयं के दस्तावेज़ीकरण के खिलाफ जाँच की गई: Craft.js 0.2.12 और GrapesJS 0.23.6। "कस्टम" एक विवरण है, आलोचना नहीं - कई पंक्तियों के लिए यह ठीक यही कारण है कि एक टीम एक अविचारी ढांचे को चुनती है।
देखें कि वास्तुशिल्प रूप से इसका क्या मतलब हैसबसे बड़ा अंतर केवल सुविधाओं की संख्या नहीं है। दो ढांचे डेवलपर्स को विज़ुअल एडिटर बनाने के लिए अलग-अलग शुरुआती बिंदु देते हैं।
एक रैखिक श्रृंखला। Craft.js नोड ट्री का मालिक है; हर दूसरी परत आपकी है।
सबसिस्टम के साथ एक श्रृंखला। इंजन अपने स्वयं के संपादन मॉड्यूल के साथ आता है।
Craft.js कम शुरू होता है। यह आपको एक नोड ट्री, ड्रैग-एंड-ड्रॉप कनेक्टर, क्रमांकन और इतिहास देता है, और यह जानबूझकर स्टाइलिंग, संपत्ति, भंडारण या कैनवास के चारों ओर पैनलों पर कोई स्थिति नहीं लेता है। यह एक डिज़ाइन निर्णय है, और एक टीम के लिए जो अपने संपूर्ण संपादन अनुभव का मालिक बनना चाहती है, वह सही है।
GrapesJS उच्च शुरू होता है। कैनवास, Blocks पैनल, Style Manager, Asset Manager, Layer Manager, कमांड और Storage Manager कोर के मॉड्यूल हैं, और उनमें से किसी को बदलने या विस्तारित करने के लिए एक प्लगइन API मौजूद है।
कोई भी ढांचा एक मंच नहीं है। न तो कोई होस्टिंग, खाते, अनुमतियां, बिलिंग, बहु-किरायेदारी या प्रकाशन पाइपलाइन की आपूर्ति करता है। वे दोनों बक्से के बाहर बैठते हैं और किसी भी तरह से आपकी जिम्मेदारी बने रहते हैं।
तो सवाल यह नहीं है कि किस प्रोजेक्ट में अधिक विशेषताएं हैं। यह वह है जो शुरुआती बिंदु आपको उन हिस्सों का निर्माण करने के लिए छोड़ देता है जिन्हें आप वास्तव में रखना चाहते हैं।
यदि आपको जो परतें बनानी होंगी, वे उस पहले कॉलम में Craft.js से ऊपर बैठती हैं, तो GrapesJS मूल्यांकन के लायक है। यदि वे इसके नीचे बैठते हैं, तो माइग्रेट करने से आपको बहुत कम खरीदता है।
Craft.js एक स्पष्ट उद्देश्य के साथ एक अच्छी तरह से डिज़ाइन किया गया ढांचा है, और कई उत्पाद आकार इसके लिए बेहतर मेल खाते हैं। ये चेतावनियां नहीं हैं - ये ऐसे मामले हैं जहां GrapesJS चुनना गलत निर्णय होगा।
यदि रूटिंग से लेकर राज्य तक सब कुछ पहले से ही React में रहता है, तो React आदिम से निर्मित एक संपादक एक मानसिक मॉडल के अंदर रहता है। किसी भी चीज़ को सीमा पार करने की ज़रूरत नहीं है।
Craft.js एक वास्तविक React पेड़ का संपादन करता है। यदि आपके उपयोगकर्ता जो व्यवस्थित कर रहे हैं वह आपके React घटक हैं - मार्कअप नहीं - तो वह पत्राचार संपूर्ण मूल्य है, और यह कुछ ऐसा नहीं है जो HTML-पहला मॉडल पुनः पेश करता है।
Craft.js पैनल, टूलबार या सेटिंग सतह नहीं लगाता है। मजबूत डिज़ाइन राय वाली टीम को ओवरराइड करने के लिए कुछ के बजाय एक साफ स्लेट मिलती है।
संस्मरण, संदर्भ, सस्पेंस सीमाएँ, शेड्यूलिंग प्रस्तुत करें: जब वे विवरण मायने रखते हैं, तो संपादन योग्य ट्री को React के अंदर रखने से वे आपके नियंत्रण में रहते हैं।
वास्तविक उपयोगकर्ताओं और वास्तविक सामग्री के साथ एक कार्यशील संपादक एक संपत्ति है। इसे बदलने की लागत शायद ही कभी अकेले फीचर सूची द्वारा उचित होती है।
यदि आपका रिज़ॉल्वर, आपके सेटिंग पैनल और आपकी सामग्री पाइपलाइन सभी Craft.js नोड मॉडल मानते हैं, तो युग्मन गहरा है और इसे कहीं और पुनः पेश करना वास्तविक काम है।
इन स्थितियों में, Craft.js को बदलने से अनावश्यक माइग्रेशन कार्य हो सकता है।
पूर्ण निर्णय मैट्रिक्स देखेंनीचे दिए गए संकेत इस बारे में हैं कि आपको अन्यथा क्या बनाना होगा। प्रत्येक कार्ड उनमें से कुछ एकत्र करता है; यदि कई आपकी परियोजना का वर्णन करते हैं, तो मूल्यांकन आपके समय के लायक है।
कैनवास, Blocks, Style Manager, Asset Manager, Layer Manager, कमांड और स्टोरेज बैकलॉग के बजाय कोर के मॉड्यूल हैं। यदि आपके रोडमैप में वर्तमान में उनमें से चार हैं, तो यह संकेत है।
GrapesJS एक दस्तावेज़ संपादित करता है और साफ़ मार्कअप और स्टाइलशीट तैयार करता है। जब आपके उपयोगकर्ताओं द्वारा बनाई गई कलाकृति को आपके React ऐप के बाहर प्रस्तुत किया जाना है, तो यह आपके द्वारा लिखे गए निर्यात चरण के बजाय एक मूल वर्कफ़्लो है।
आपकी टीम का प्रयास खातों, योजनाओं, टेम्पलेट्स और प्रकाशन में जाता है - स्टाइल पैनल के पुनर्निर्माण में नहीं। GrapesJS उस उत्पाद के अंदर संपादन परत है, उत्पाद स्वयं नहीं।
SaaS पेज बिल्डर गाइडसंपादक एक DOM तत्व में माउंट होता है जिसे आप नियंत्रित करते हैं, एक ऐप के अंदर आपने जरूरी नहीं लिखा था। वह बाधा एम्बेड करने योग्य मार्गदर्शिका के बारे में है।
एम्बेड करने योग्य बिल्डर गाइडपैनल, आइकन, लेबल, अनुवाद और संपूर्ण दृश्य भाषा बदली जा सकती है, इसलिए संपादक आपके बजाय आपके ग्राहक के ब्रांड को ले जा सकता है।
व्हाइट-लेबल गाइडईमेल टेबल-आधारित मार्कअप और इनलाइन CSS की मांग करता है - एक ही संपादन सतह के साथ एक अलग दस्तावेज़ मॉडल। प्रीसेट बिल्कुल उसी के लिए मौजूद हैं।
ईमेल संपादक गाइडकेवल सुविधाओं की तुलना न करें। संपादक को स्वयं आज़माएं - एक ब्लॉक को अंदर खींचें, एक तत्व का चयन करें, इसे फिर से स्टाइल करें, और कैनवास को फ़ोन की चौड़ाई में स्विच करें।
आधिकारिक डेमो और बाज़ार से तीन प्रकाशित संपादक। हर एक क्लिक पर लोड होता है, अपने स्वयं के फ्रेम में।
पूर्ण डेमो खोलेंस्टॉक GrapesJS संपादक जिसमें कोई प्लगइन्स और कोई डिज़ाइन सिस्टम नहीं है। यह वही है जो कोर आपको कुछ भी कॉन्फ़िगर करने से पहले देता है।
इस पृष्ठ पर एक फ्रेम में लोड होता है।
दोनों परियोजनाएं उस चीज़ को कॉल करती हैं जिसे उपयोगकर्ता "घटक" के चारों ओर खींचता है, लेकिन दो परिभाषाएँ विनिमेय नहीं हैं। यह वह अंतर है जो तय करता है कि माइग्रेशन कितना काम करता है।
एक React घटक जिसे संपादक कनेक्टर्स के माध्यम से चलाता है। इसकी संपादन योग्य सतह इसकी React प्रॉप्स है।
संपादक के अपने दस्तावेज़ मॉडल में एक परिभाषा। इसकी संपादन योग्य सतह traits, विशेषताएँ और शैलियाँ हैं।
React डिस्क्रिप्टर के साथ एक Craft.js घटक एक मॉडल के साथ एक पंजीकृत घटक प्रकार बन जाता है और डिफ़ॉल्ट हो जाता है। यह जो मार्कअप बनाता है वह उस मॉडल में चला जाता है।
प्रॉप्स जो एक संपादक उपयोगकर्ता बदल सकता है traits बन जाता है। प्रॉप्स जो केवल आपके कोड सेट करते हैं, विशेषता या निश्चित मॉडल गुण बन जाते हैं।
क्रमबद्ध नोड ट्री प्रोजेक्ट डेटा बन जाता है। दोनों JSON हैं, लेकिन आकार अलग-अलग हैं, इसलिए यह एक ऐसा परिवर्तन है जिसे आप लिखते हैं और परीक्षण करते हैं।
आपके द्वारा React में लिखे गए सेटिंग्स पैनल को अंतर्निहित विशेषता पैनल द्वारा बदल दिया जाता है, साथ ही कस्टम कमांड और पैनल जहां आपको ऐसे व्यवहार की आवश्यकता होती है जो कोर में नहीं होता है।
यह एक वैचारिक मानचित्रण है, स्वचालित कनवर्टर नहीं। कोई भी उपकरण Craft.js रिज़ॉल्वर नहीं पढ़ता है और GrapesJS घटक प्रकारों का उत्सर्जन नहीं करता है - ऊपर दिया गया पत्राचार वह है जिसे आप लागू करते हैं, एक बार प्रति घटक प्रकार।
एक ही विचार - एक संपादन योग्य शीर्षक और विवरण के साथ एक hero अनुभाग - प्रत्येक तरफ परिभाषित। उन्हें एक अवधारणा की दो परिभाषाओं के रूप में पढ़ें, न कि एक ही फ़ाइल के पहले और बाद में।
// 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 परिभाषाएँ इसका केवल आधा हैं। आपके उपयोगकर्ताओं द्वारा पहले से बनाई गई हर चीज़ Craft.js नोड प्रारूप में संग्रहीत है, और इसे स्थानांतरित करने का अर्थ है उस पेड़ पर चलना और उन परिभाषाओं का उत्सर्जन करना जिन्हें आपके नए घटक प्रकार समझते हैं।
// 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);दोनों नमूने उदाहरणात्मक हैं। वे मानचित्रण का आकार और परिवर्तन का आकार दिखाते हैं; न तो ड्रॉप-इन माइग्रेशन है, और किसी भी प्रोजेक्ट में कुछ भी आपके लिए एक उत्पन्न नहीं करता है।
तीन व्यापक स्तर। उनमें से कोई भी अवधि नहीं रखता है, क्योंकि ईमानदार उत्तर पूरी तरह से आपके कोडबेस पर निर्भर करता है - और एक पृष्ठ जो आपको एक संख्या का वादा करता है जिसे वह नहीं जान सकता है, वह आपको योजना बनाने में मदद नहीं कर रहा है।
मुट्ठी भर घटक प्रकार, एक छोटी सेटिंग्स सतह, और सामग्री जिसने अभी तक कई विविधताएं जमा नहीं की हैं।
आप शायद यहाँ हैं यदि
आमतौर पर अपेक्षाकृत केंद्रित प्रवासन।
अपने स्वयं के पैनल, एक टेम्पलेट लाइब्रेरी, सहेजे गए दस्तावेज़ों और एक घटक सेट के साथ एक वास्तविक संपादक जो उत्पाद को फिट करने के लिए विकसित हुआ है।
आप शायद यहाँ हैं यदि
घटक और डेटा मैपिंग की आवश्यकता है।
Components जो ऐप संदर्भ, गैर-स्पष्ट स्थानों में विस्तारित संपादक व्यवहार और संपादन अनुभव में एम्बेडेड व्यावसायिक नियमों पर निर्भर करता है।
आप शायद यहाँ हैं यदि
एक वास्तुकला समीक्षा और एक चरणबद्ध प्रवास की आवश्यकता है।
माइग्रेशन जटिलता इस बात पर निर्भर करती है कि मौजूदा ऐप को Craft.js से कितनी गहराई तक जोड़ा गया है।
चेकलिस्ट के माध्यम से काम करेंएक प्रवास क्रम वास्तव में चलता है, चार चरणों में समूहीकृत. उपयोगी है चाहे आप इसे स्वयं करें या किसी को सौंप दें.
15 कदमइससे पहले कि कुछ भी फिर से बनाया जाए, पता करें कि वास्तव में क्या स्थानांतरित करना है।
Component प्रकार, पैलेट और आपके उपयोगकर्ता अपेक्षित नियंत्रण।
मौजूदा सामग्री, जहां इसे संग्रहीत किया जाता है, और जिस मीडिया को यह संदर्भित करता है।
साबित करें कि यह काम करता है, फिर लोगों को बिना किसी कठिन कटओवर के स्थानांतरित करें।
बक्से एक प्रिंट करने योग्य योजना हैं, सहेजी गई स्थिति नहीं - यहां कुछ भी आपके ब्राउज़र में संग्रहीत नहीं है। आपकी टीम पहले से ही जो भी ट्रैकर उपयोग करती है, उसमें चरणों को कॉपी करें।
किसी ऐसे व्यक्ति से बात करें जिसने इसे किया हैस्वचालित रूप से नहीं।
Craft.js और GrapesJS विभिन्न घटक और संपादक मॉडल का उपयोग करते हैं। एक Craft.js घटक एक React घटक है जिसे संपादक कनेक्टर्स के माध्यम से चलाता है; एक GrapesJS घटक प्रकार संपादक के अपने दस्तावेज़ मॉडल के अंदर एक परिभाषा है। ऐसा कोई एडाप्टर नहीं है जो एक को दूसरे में बदल देता है, और कोई भी पृष्ठ जो आपको अन्यथा बताता है वह उस काम का वर्णन कर रहा है जिसे आप बाद में खोजेंगे।
मार्कअप लें और अपने React घटक द्वारा उत्पादित स्टाइलिंग करें और इसे traits के साथ एक घटक प्रकार के रूप में व्यक्त करें। यह डिफ़ॉल्ट पथ है और यह आमतौर पर जितना लगता है उससे कम काम करता है, क्योंकि मार्कअप पहले से मौजूद है।
लागत: प्रति घटक प्रकार की एक परिभाषा, हाथ से लिखी गई और किसी भी अन्य कोड की तरह समीक्षा की गई।
मूल्य निर्धारण नियम, सत्यापन, डेटा लाने और स्वरूपण शायद ही कभी संपादक के होते हैं। उन्हें संपादक द्वारा कॉल किए गए मॉड्यूल में उठाएं, और वे इस कदम को अछूते रहते हैं।
लागत: तर्क को पहले प्रतिपादन से अलग करने की आवश्यकता होती है, जो अक्सर परवाह किए बिना करने लायक होता है।
कुछ घटकों को वास्तव में रेंडर समय पर React की आवश्यकता होती है। उन्हें संपादक के स्वामित्व वाले कंटेनर में प्रस्तुत किया जा सकता है, जिसमें संपादक परिणाम को एक घटक के रूप में मानता है।
लागत: सबसे महंगा विकल्प। इसका उपयोग उन कुछ घटकों के लिए करें जिन्हें इसकी आवश्यकता है, न कि एक सामान्य रणनीति के रूप में।
संपादन योग्य सतह वह है जिसकी आपके उपयोगकर्ता परवाह करते हैं। प्रत्येक संपादन योग्य प्रोप को किसी विशेषता या विशेषता के अनुसार मैप करना अनुभव को तब भी संरक्षित करता है जब नीचे का कार्यान्वयन पूरी तरह से नया हो।
लागत: संपत्ति के नामों और प्रकारों का मिलान करना होगा, और चूक को फिर से स्थापित करना होगा।
GrapesJS चुनने का एक फायदा यह है कि आप हर सुविधा को खरोंच से लागू करने के बजाय प्लगइन्स के माध्यम से संपादक का विस्तार कर सकते हैं। ये GJS.Market कैटलॉग से वास्तविक लिस्टिंग हैं - नाम, कीमतें और छवियां सीधे बाज़ार से आती हैं, इसलिए यहां कुछ भी वास्तव में बिक्री के लिए जो है उससे दूर नहीं जा सकता है।
चेकलिस्ट चरण 1 से 5। तैयार घटक और ब्लॉक सेट जिन्हें आप हाथ से परिभाषित करने के बजाय हर प्रकार से शुरू कर सकते हैं।
अनुभाग ब्राउज़ करेंपैलेट शुरू करने के लिए संरचनात्मक ब्लॉकों का एक आधारभूत सेट।
मौजूदा मार्कअप से घटक प्रकार उत्पन्न करता है।
संपादन योग्य गुणों के साथ इनपुट घटक, विशेषता पैनल के लिए तैयार हैं।
आपकी टीम को नलसाजी लिखे बिना अपना स्वयं का ब्लॉक सेट पंजीकृत करने देता है।
चेकलिस्ट चरण 6. इनलाइन समृद्ध पाठ संपादन, जो Craft.js परियोजना में लगभग हमेशा एक घटक होता है जिसे आपकी टीम में किसी ने लिखा था।
अनुभाग ब्राउज़ करेंअंतर्निहित पाठ संपादन को CKEditor के लिए स्वैप करता है 5.
अंतर्निहित पाठ संपादन को TinyMCE के लिए स्वैप करता है 6.
अंतर्निहित पाठ संपादन को Froala के लिए स्वैप करता है।
अधिक स्वरूपण क्रियाओं के साथ अंतर्निहित पाठ उपकरण पट्टी का विस्तार करता है.
यदि आपके React घटक किसी उपयोगिता या घटक ढांचे पर बनाए गए हैं, तो वही सिस्टम आपके उपयोगकर्ताओं द्वारा खींचे गए ब्लॉक का समर्थन कर सकता है।
अनुभाग ब्राउज़ करेंTailwind-आधारित ब्लॉक जो उपयोगिता-प्रथम डिज़ाइन प्रणाली से मेल खाते हैं।
कैनवास के अंदर Tailwind कक्षाएं प्रस्तुत करता है।
Bootstrap 5 लेआउट और सामग्री ब्लॉक।
Bootstrap पुराने सिस्टम के लिए 4 ग्रिड और सामग्री ब्लॉक।
चेकलिस्ट चरण 8 से 10. जहां दस्तावेज़ बने रहते हैं और अपलोड किया गया मीडिया कहां जाता है.
अनुभाग ब्राउज़ करेंदस्तावेज़ों को ब्राउज़र में रखता है — प्रोटोटाइप और ऑफ़लाइन कार्य के लिए उपयोगी.
प्रोजेक्ट डेटा को क्लाउड Firestore पर बनाए रखता है।
स्टोर ने Firebase में मीडिया अपलोड किया।
Cloudinary के पीछे मीडिया लाइब्रेरी के रूप में Asset Manager का उपयोग करता है।
इनमें से प्रत्येक एक अलग उत्पाद है, और प्रत्येक के पास आर्किटेक्चर, ट्रेड-ऑफ और प्लगइन्स के साथ अपना गाइड है जो लागू होता है।
सीधे अपने SaaS उत्पाद के अंदर एक विज़ुअल एडिटर बनाएं।
गाइड पढ़ेंकिसी मौजूदा ऐप में विज़ुअल एडिटर एम्बेड करें।
गाइड पढ़ेंReact-आधारित एप्लिकेशन बनाएं GrapesJS के आसपास।
गाइड पढ़ेंतालिका-सुरक्षित आउटपुट के साथ विज़ुअल ईमेल संपादन वर्कफ़्लोज़ बनाएँ।
गाइड पढ़ेंअपने ग्राहकों के लिए एक ब्रांडेड संपादन अनुभव बनाएं।
गाइड पढ़ेंहेडलेस सामग्री सिस्टम में विज़ुअल संपादन जोड़ें।
गाइड पढ़ें@grapesjs/reactएक आधिकारिक आवरण घटक, या एक सादा रेफरी और एक प्रभाव।Next.jsnext/dynamicकेवल ग्राहक, आलस्य से लोड किया गया है ताकि यह पहले पेलोड से बाहर रहे।VueonMounted()इसे माउंटेड हुक में शुरू करें, जब घटक अनमाउंट हो जाए तो इसे नष्ट कर दें।AngularngAfterViewInit()दृश्य प्रारंभ होने के बाद, बाहरी परिवर्तन का पता लगाने के बाद इसे प्रारंभ करें।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.
}}
/>
);
}एकीकरण परत उद्देश्य पर पतली है। आपका ढांचा पृष्ठ का मालिक है, GrapesJS कैनवास का मालिक है, और संपादक के मौजूद होने के बाद आपके घटक प्रकार पंजीकृत हो जाते हैं।
यदि आपने तय कर लिया है कि GrapesJS फिट बैठता है, तो अभी भी एक दूसरा निर्णय है: मौजूदा संपादक को पार ले जाएं, या उसके बगल में एक नया बनाएं। उनकी कीमत अलग-अलग होती है।
घटक सेट, टेम्पलेट और सहेजी गई सामग्री को पार ले जाएं, और इसका उपयोग करने वाले लोगों के लिए उत्पाद को निरंतर रखें।
माइग्रेशन चुनें जब
अधिक मानचित्रण कार्य सामने है, उन लोगों के लिए बहुत कम व्यवधान जो पहले से ही संपादक पर भरोसा करते हैं।
चेकलिस्ट देखेंनए संपादक को अपनी चीज़ के रूप में बनाएं, सामग्री तैयार होने के बाद उसे पूरा करें, और अवसर का उपयोग करके यह ठीक करें कि आप अन्यथा क्या आगे बढ़ाएंगे।
नए सिरे से शुरू करने पर विचार करें जब
कम संगतता काम करता है, लेकिन सामग्री परिवर्तन अभी भी लिखा जाना है यदि दस्तावेज़ पहले से मौजूद हैं।
पहले संपादक का प्रयास करेंप्रति पंक्ति एक आवश्यकता, एक प्रारंभिक बिंदु। इनमें से चार Craft.js पर इंगित करते हैं, जो अन्य पांच को पढ़ने लायक बनाता है।
| आपकी आवश्यकता | बेहतर प्रारंभिक बिंदु |
|---|---|
| एक संपादक जो React घटक वृक्ष पर काम करता है | Craft.js |
| एक पूर्ण दृश्य संपादक नींव | GrapesJS |
| एक HTML और CSS पेज बिल्डर | GrapesJS |
| एक गहरी React-पहली वास्तुकला | Craft.js |
| अंतर्निहित दृश्य संपादन उपकरण | GrapesJS |
| एक अत्यधिक कस्टम React संपादक इंटरफ़ेस | Craft.js |
| एक प्लगइन-संचालित संपादक पारिस्थितिकी तंत्र | GrapesJS |
| एक SaaS पेज बिल्डर | GrapesJS |
| एक मौजूदा, परिपक्व Craft.js आवेदन | पहले माइग्रेशन लागत का आकलन करें |
कोई सार्वभौमिक विजेता नहीं है। सही विकल्प आपके संपादक वास्तुकला और उत्पाद आवश्यकताओं पर निर्भर करता है।
GJS.Market GrapesJS संपादकों का निर्माण और माइग्रेट करता है। यदि आप अकेले चेकलिस्ट के माध्यम से काम नहीं करना चाहते हैं, तो ये वे चरण हैं जिन्हें एक सहभागिता कवर करती है - और पहला एक आकलन है, जो अच्छी तरह से यह निष्कर्ष निकाल सकता है कि Craft.js पर बने रहना सही उत्तर है।
वास्तुकला मूल्यांकन
हम मौजूदा संपादक को पढ़ते हैं, यह पता लगाते हैं कि यह Craft.js से कितनी गहराई से जुड़ा हुआ है, और स्पष्ट रूप से कहते हैं कि क्या माइग्रेशन करने लायक है।
Component और टेम्पलेट मैपिंग
प्रत्येक घटक प्रकार को GrapesJS परिभाषा में मैप किया जाता है, इसके संपादन योग्य गुणों को traits में बदल दिया जाता है, और मौजूदा टेम्पलेट्स को उनके साथ मैप किया जाता है।
डेटा और एसेट माइग्रेशन
क्रमबद्ध Craft.js सामग्री से प्रोजेक्ट डेटा में परिवर्तन आपके वास्तविक दस्तावेज़ों के विरुद्ध लिखा और परीक्षण किया जाता है, और मीडिया को इसके साथ स्थानांतरित किया जाता है।
कस्टम संपादक तर्क और प्लगइन्स
जिस व्यवहार का कोर में कोई समकक्ष नहीं है, उसे कमांड, पैनल या प्लगइन्स के रूप में फिर से बनाया जाता है, इसलिए यह पैच किए जाने के बजाय बनाए रखने योग्य रहता है।
भंडारण और प्रकाशन
Storage Manager आपके बैकएंड से जुड़ा हुआ है और प्रकाशन पथ अंत से अंत तक जुड़ा हुआ है।
समानांतर चल रहा है और परीक्षण
दोनों संपादक एक ही सामग्री के खिलाफ कंधे से कंधा मिलाकर चलते हैं ताकि किसी को भी उस पर ले जाने से पहले नए को सत्यापित किया जा सके।
यह इस बात पर निर्भर करता है कि आप क्या बना रहे हैं। GrapesJS उन टीमों के लिए निकटतम विकल्प है जो पहले से ही इकट्ठे घटकों, ब्लॉक, स्टाइलिंग, संपत्ति और भंडारण के साथ एक विज़ुअल एडिटर फाउंडेशन चाहते हैं। Puck आत्मा में Craft.js के करीब है यदि आप पहले React रहना चाहते हैं। कोई एक सबसे अच्छा उत्तर नहीं है, यही कारण है कि यह पृष्ठ एक सिफारिश के बजाय एक तुलना है।
एक ड्रॉप-इन एक नहीं। दोनों के अलग-अलग घटक मॉडल हैं, इसलिए आगे बढ़ने का मतलब है अपने घटकों को फिर से परिभाषित करना और अपनी संग्रहीत सामग्री को बदलना। GrapesJS इस अर्थ में एक प्रतिस्थापन है कि यह एक ही काम कर सकता है, न कि इस अर्थ में कि आप निर्भरता को स्वैप कर सकते हैं।
Craft.js पेज एडिटर्स के निर्माण के लिए एक React फ्रेमवर्क है: यह आपके React घटकों का एक नोड ट्री का मालिक है और स्टाइलिंग, संपत्ति, भंडारण और आसपास के इंटरफ़ेस को आपके लिए छोड़ देता है। GrapesJS एक विज़ुअल एडिटर फ्रेमवर्क है जिसके कोर में पहले से ही एक कैनवास, ब्लॉक, एक Style Manager, एक Asset Manager, एक Layer Manager, कमांड, स्टोरेज और एक प्लगइन सिस्टम शामिल है।
नहीं। कोर फ्रेमवर्क-अज्ञेयवादी है और इसमें कोई React निर्भरता नहीं है। एक आधिकारिक React रैपर पैकेज है, लेकिन आंतरिक रूप से GrapesJS React पेड़ के बजाय अपना स्वयं का दस्तावेज़ मॉडल बनाए रखता है।
हाँ। एक आधिकारिक आवरण संपादक को React घटक के रूप में माउंट करता है, और आप इसे समान रूप से एक रेफरी और एक प्रभाव से स्वयं शुरू कर सकते हैं। React app host संपादक है; संपादक अभी भी अपने स्वयं के कैनवास का मालिक है।
स्वचालित रूप से नहीं। एक Craft.js घटक एक React घटक है जिसे संपादक कनेक्टर्स के माध्यम से चलाता है; एक GrapesJS घटक प्रकार संपादक के अपने मॉडल में एक परिभाषा है। अधिकांश टीमें दृश्य परिभाषा का पुनर्निर्माण करती हैं, व्यावसायिक तर्क को संपादक के बाहर मॉड्यूल में रखती हैं, और केवल उन घटकों के लिए एक एकीकरण परत जोड़ती हैं जिन्हें वास्तव में रेंडर समय पर React की आवश्यकता होती है।
हां, उन्हें परिवर्तित करने के बजाय उन्हें मैप करके। प्रत्येक Craft.js घटक एक पंजीकृत घटक प्रकार बन जाता है, इसके संपादन योग्य प्रॉप्स traits बन जाते हैं, और इसके द्वारा प्रदान किया गया मार्कअप प्रकार के मॉडल में चला जाता है। यह हाथ से लिखा गया कार्य है, प्रति घटक प्रकार लगभग एक परिभाषा।
प्रॉप्स एक संपादक उपयोगकर्ता मानचित्र को traits में बदल सकता है। प्रॉप्स केवल आपका कोड विशेषताओं या निश्चित मॉडल गुणों के लिए मानचित्र सेट करता है। एप्लिकेशन बताता है कि रेंडर समय पर पढ़ने वाले घटक का कोई प्रत्यक्ष समकक्ष नहीं होता है और आमतौर पर उसे घटक से बाहर निकलकर संपादक के चारों ओर कोड में जाना पड़ता है।
हां, एक बार घटक प्रकार मौजूद हो जाने के बाद। एक टेम्पलेट सामग्री संग्रहीत की जाती है, इसलिए यह किसी भी अन्य दस्तावेज़ के समान परिवर्तन से गुजरता है: क्रमबद्ध नोड ट्री पर चलें, समतुल्य GrapesJS घटकों का उत्सर्जन करें, और परिणाम को नए सिस्टम में टेम्पलेट के रूप में सहेजें।
हाँ, एक परिवर्तन के साथ आप लिखते हैं। Craft.js नोड्स का एक JSON मानचित्र बना रहता है, प्रत्येक में एक हल किए गए घटक नाम, उसके प्रॉप्स और उसके बच्चे होते हैं। GrapesJS प्रोजेक्ट डेटा को अपने JSON आकार में लोड करता है। दोनों JSON हैं, इसलिए माइग्रेशन एक ट्री वॉक प्लस प्रति घटक प्रकार एक मैपिंग फ़ंक्शन है।
इसका यह एक आम उपयोग है। GrapesJS संपादन परत की आपूर्ति करता है; खाते, योजनाएँ, अनुमतियाँ, टेम्पलेट, होस्टिंग और प्रकाशन आपके निर्माण के लिए बने रहेंगे। SaaS पेज बिल्डर गाइड में बताया गया है कि वे जिम्मेदारियाँ कैसे विभाजित होती हैं।
हाँ। GrapesJS केवल क्लाइंट है - यह शुरू होने पर ब्राउज़र ग्लोबल्स को छूता है - इसलिए इसे आलस्य से लोड किया जाता है और सर्वर रेंडरिंग के बाहर प्रस्तुत किया जाता है। यह आपके पहले पेलोड से लगभग 300 केबी भी रखता है।
हाँ। पैकेज अपनी प्रकार की परिभाषाएँ भेजता है, इसलिए किसी अलग प्रकार के पैकेज की आवश्यकता नहीं होती है। TypeScript गाइड संस्करण के फर्श और उन प्रकारों को कवर करता है जो घोषित किए गए हैं लेकिन निर्यात नहीं किए गए हैं।
हाँ। पैनल, बटन, आइकन, लेबल और अनुवाद सभी बदले जा सकते हैं, और प्लगइन API इंटरफ़ेस के कुछ हिस्सों को पूरी तरह से हटा या पुनर्निर्माण कर सकता है। यही बात इसे किसी और के ब्रांडेड उत्पाद के अंदर एम्बेडेड संपादक के रूप में व्यवहार्य बनाती है।
हाँ। एक प्लगइन एक फ़ंक्शन है जो Editor प्राप्त करता है और घटक प्रकार, ब्लॉक, कमांड, पैनल या स्टोरेज एडेप्टर को पंजीकृत करता है। यह मुख्य विस्तार तंत्र है, और यह वही है जिस पर बाज़ार लिस्टिंग बनाई गई है।
GJS.Market GrapesJS प्लगइन्स, ब्लॉक, प्रीसेट और एकीकरण की एक सूची है, जिसे कैटलॉग अनुभाग द्वारा व्यवस्थित किया गया है। इस पृष्ठ का प्लगइन्स अनुभाग लाइव कीमतों के साथ वर्तमान लिस्टिंग दिखाता है।
माइग्रेट करें जब आपके पास कई टेम्पलेट हों, जो उपयोगकर्ता वर्तमान संपादक पर निर्भर करते हैं, या व्यावसायिक तर्क को ले जाने लायक हों। नए सिरे से शुरू करें जब Craft.js संपादक अभी भी छोटा हो, बहुत कम सहेजी गई सामग्री हो, या घटक आर्किटेक्चर वैसे भी बदल रहा हो। किसी भी तरह से, मौजूदा दस्तावेज़ों को अभी भी एक परिवर्तन की आवश्यकता है।
हाँ। एक जुड़ाव एक वास्तुकला मूल्यांकन के साथ शुरू होता है, फिर घटक और टेम्पलेट मानचित्रण, डेटा और परिसंपत्ति माइग्रेशन, कस्टम संपादक तर्क, भंडारण और प्रकाशन, और समानांतर चलने की अवधि को कवर करता है। मूल्यांकन यह निष्कर्ष निकाल सकता है कि Craft.js पर बने रहना सही उत्तर है।
यदि आपके वर्तमान संपादक को बहुत अधिक कस्टम बुनियादी ढांचे की आवश्यकता है, तो वास्तविक प्रोजेक्ट के साथ GrapesJS का मूल्यांकन करें। संपादक से शुरू करें, इसे प्लगइन्स के साथ विस्तारित करें, और अपने उत्पाद के चारों ओर आर्किटेक्चर को अनुकूलित करें।
इस पृष्ठ पर आगे चल रहे संपादक का उपयोग करें, फिर लंबे समय तक आधिकारिक डेमो और मार्केटप्लेस डेमो लें।
संपादक खोलेंComponents, ब्लॉक, रिच टेक्स्ट एडिटिंग, डिज़ाइन सिस्टम, स्टोरेज और एसेट्स — एक्सटेंशन जो काम को प्रतिस्थापित करते हैं जिन्हें आप अन्यथा लिखेंगे।
प्लगइन्स का अन्वेषण करेंपहले एक मूल्यांकन, फिर घटक मानचित्रण, डेटा माइग्रेशन और समानांतर चल रहा है। एक ईमानदार उत्तर सहित यदि माइग्रेट करना इसके लायक नहीं है।
माइग्रेशन सहायता का अनुरोध करें