Vue के लिए जिम्मेदार रहता है
आपका एप्लिकेशन, ठीक वैसे ही जैसे आप इसे आज बनाते हैं।
- आवेदन UI
- रूटिंग
- प्रमाणीकरण
- व्यापार तर्क
- राज्य प्रबंधन
- APIs और डेटा प्राप्त करना
- बिलिंग और योजनाएं
- उपयोगकर्ता और अनुमतियाँ
कस्टम ब्लॉक, घटकों, टेम्प्लेट, उत्तरदायी संपादन और अपने स्वयं के भंडारण और प्रकाशन वर्कफ़्लो के साथ Vue 3 और Nuxt के लिए एक विज़ुअल ड्रैग-एंड-ड्रॉप पेज बिल्डर बनाएं।
ब्लॉक
आपका पेज
शैलियों
0.23.6
GrapesJS संस्करण यह पृष्ठ इसके विरुद्ध लिखा गया है
100+
प्लगइन्स और टेम्पलेट GJS.Market पर
BSD-3-Clause
संपादक कोर का लाइसेंस
$0
संपादक को स्वयं चलाने की लागत
यह अपने आप में GrapesJS है, स्क्रीनशॉट नहीं। एक ब्लॉक को खींचें, एक तत्व का चयन करें, इसे फिर से स्टाइल करें, डिवाइस की चौड़ाई स्विच करें। संपादक एक 'init()' कॉल द्वारा बनाया गया है - एक Vue ऐप में जो 'onMounted' में कॉल करता है, और जो कुछ भी आप यहां देखते हैं वह समान व्यवहार करता है।
बिना किसी थीम के स्टॉक संपादक को लागू किया गया है। यह वही है जो आपको कुछ भी कॉन्फ़िगर करने से पहले मिलता है - नीचे दिए गए प्रत्येक बिल्डर को शुरुआती बिंदु से अनुकूलित किया गया था।
iframe में एक बाहरी डेमो लोड करता है।
एक उत्पादन पृष्ठ बिल्डर कुछ Vue घटकों से कहीं अधिक है। यह एक कैनवास, एक ड्रैग-एंड-ड्रॉप सिस्टम, एक घटक मॉडल, एक स्टाइल इंजन, उत्तरदायी संपादन, पूर्ववत इतिहास, परिसंपत्ति प्रबंधन, भंडारण और निर्यात है। यहाँ पूरी सतह है, और प्रत्येक टुकड़े का मालिक कौन है।
एक पृथक दस्तावेज़ उपयोगकर्ता सीधे संपादित करते हैं, अपनी शैलियों के साथ और स्क्रॉल करते हैं।
ड्रॉप लक्ष्य, सम्मिलन बिंदु, पुनः व्यवस्थित करने और नेस्टिंग नियम।
टाइप किए गए तत्वों को उनकी अपनी सेटिंग्स, बाधाओं और व्यवहार के साथ।
चयन करने के लिए क्लिक, होवर रूपरेखा, प्रति-तत्व टूलबार और बैज।
टाइपोग्राफी, रंग, रिक्ति और लेआउट नियंत्रण चयनकर्ताओं के लिए बाध्य हैं।
डिवाइस की चौड़ाई और ब्रेकपॉइंट-स्कोप शैलियाँ एक ही कैनवास में।
पृष्ठ का एक पेड़ इतनी गहरी संरचनाएं नौगम्य रहती हैं।
प्रत्येक संपादन में एक कमांड इतिहास, न कि केवल पाठ।
वर्तमान दस्तावेज़ से उत्पन्न मार्कअप और स्टाइलशीट को साफ़ करें।
तैयार किए गए अनुभाग उपयोगकर्ता खींचते हैं। आपका, या स्थापित।
पूरे शुरुआती लेआउट इसलिए कोई भी खाली कैनवास से नहीं मिलता है।
अपलोड, मीडिया लाइब्रेरी और इमेज हैंडलिंग।
अंतर्निहित संपादक से परे इनलाइन पाठ स्वरूपण।
एक ही प्रोजेक्ट के अंदर एक से अधिक पृष्ठ।
जहां प्रोजेक्ट डेटा लिखा और पढ़ा जाता है। आपका API, आपका डेटाबेस।
कौन कौन सा प्रोजेक्ट खोल सकता है, संपादित कर सकता है और प्रकाशित कर सकता है।
एक ग्राहक के पृष्ठों, संपत्तियों और टेम्पलेट्स को दूसरे के पृष्ठों से अलग करना.
स्वीकृत आउटपुट को अपने बुनियादी ढांचे पर एक लाइव पेज में बदलना।
प्रत्येक ग्राहक का क्या अधिकार है, और वे इसके लिए क्या भुगतान करते हैं।
मध्य कॉलम GJS.Market का बिंदु है: यह वास्तविक क्षमता है जिसे आप शेड्यूल के बजाय स्थापित करते हैं। दाहिने हाथ का कॉलम कभी भी किसी और की समस्या नहीं बनता है - यह आपका उत्पाद है, और यह पृष्ठ हर उस अनुभाग में इसके बारे में स्पष्ट है जो इसे छूता है।
पांच-चरणीय एकीकरण देखेंGrapesJS आपके एप्लिकेशन का प्रतिस्थापन नहीं है और न ही होस्ट की गई सेवा है। यह एक संपादन इंजन है जो एक मार्ग के एक तत्व में माउंट होता है। इस आरेख में इसके ऊपर और नीचे सब कुछ आपका रहता है।
वह सब कुछ जो उत्पाद को आपका बनाता है। GrapesJS की इसमें से किसी के बारे में कोई राय नहीं है।
एक घुड़सवार उदाहरण, एक घटक के अंदर, एक मार्ग पर। यह वह परत है जिसे आप नहीं बना रहे हैं।
संपादक आपको दो कलाकृतियाँ और एक मीडिया स्ट्रीम सौंपता है। आगे क्या होता है यह आपके API का निर्णय है।
आपके द्वारा डिज़ाइन की गई स्कीमा में साधारण पंक्तियाँ। यहां कुछ भी GrapesJS प्रारूप नहीं है जिसे आपको अपनाना है।
इसे ऊपर से नीचे पढ़ें: आपका Vue एप्लिकेशन उपयोगकर्ता को प्रमाणित करता है और उन्हें एक संपादक पृष्ठ पर रूट करता है; संपादक प्रोजेक्ट डेटा तैयार करता है; आपका API इसे आपके डेटाबेस में लिखता है। संपादक कभी भी आपके डेटाबेस से बात नहीं करता है, और आपके डेटाबेस को कभी भी संपादक को समझने की आवश्यकता नहीं होती है।
संपादक Vue घटक में कैसे माउंट होता हैनहीं। यह पहला प्रश्न है जो अधिकांश Vue डेवलपर्स पूछते हैं, और उत्तर बदल देता है कि बाकी पृष्ठ कैसे पढ़ता है। दो परतें ओवरलैप नहीं होती हैं: एक आपके एप्लिकेशन को चलाती है, दूसरी इसके अंदर एक संपादन सतह चलाती है।
आपका एप्लिकेशन, ठीक वैसे ही जैसे आप इसे आज बनाते हैं।
दृश्य संपादन परत, एक तत्व के अंदर आप इसे देते हैं।
जब हम यहां हैं तो एक ईमानदार चेतावनी: कैनवास DOM को iframe के अंदर प्रस्तुत करता है, न कि Vue घटकों को माउंट करता है। आपका ऐप Vue है; आपके उपयोगकर्ता जो संपादित करते हैं वह HTML और CSS है जिसे आपका ऐप अपनी पसंद के अनुसार प्रस्तुत करता है।
एक ही इंजन, अलग तरह से कॉन्फ़िगर किया गया है। इनमें से प्रत्येक एक वास्तविक उत्पाद आकार है जो इसके शीर्ष पर टीमें भेजती हैं - और प्रत्येक के पास यहां एक पृष्ठ है जो गहराई तक जाता है।
SaaS
अपने ग्राहकों को आपके उत्पाद के अंदर पेज बनाने और संपादित करने दें, इसे छोड़े बिना और डेवलपर के बिना।
SaaS बिल्डरों का अन्वेषण करेंवेबसाइटें
एक पूर्ण दृश्य वेबसाइट निर्माण अनुभव: बहु-पृष्ठ परियोजनाएं, टेम्पलेट्स, संपत्ति और प्रकाशन।
लैंडिंग-पृष्ठ कोण देखेंविपणन (मार्केटिंग)
मार्केटिंग टीमों को आपके बजाय अपने स्वयं के शेड्यूल पर अभियान पृष्ठ लॉन्च करने दें।
लैंडिंग बिल्डरों का अन्वेषण करेंसामग्री
सामग्री टीमों को आपके पास पहले से मौजूद सामग्री मॉडल पर एक दृश्य संपादन सतह दें।
CMS संपादक देखेंफार्म
टाइप किए गए फ़ील्ड घटकों से विज़ुअल रूप से फ़ॉर्म लिखें, फिर उन्हें अपने स्वयं के समापन बिंदुओं पर पोस्ट करें।
फ़ॉर्म प्लगइन्स ब्राउज़ करेंईमेल
ब्राउज़र के बजाय मेल क्लाइंट के लिए निर्मित आउटपुट के साथ, ईमेल टेम्पलेट्स को नेत्रहीन रूप से लिखना और प्रबंधित करना।
ईमेल बिल्डिंग देखेंदस्तावेज़
दस्तावेज़ों, रिपोर्टों और एक-पेजर को नेत्रहीन रूप से बिछाएं, फिर उन्हें अपने बैकएंड से निर्यात या प्रस्तुत करें।
एम्बेडेड संपादक देखेंएजेंसियों
प्रत्येक ग्राहक को एक ब्रांडेड संपादन वातावरण भेजें जो आपके उत्पाद की तरह दिखता है, लाइब्रेरी की तरह नहीं।
व्हाइट-लेबल का अन्वेषण करेंयह वही है जो संपादक आपको पहले दिन देता है, इससे पहले कि एक प्लगइन स्थापित हो। हर एक कॉन्फ़िगर करने योग्य है - पैनल, श्रेणियां, बाधाएं और लेबल सेट करने के लिए सभी आपके हैं।
उपयोगकर्ता अनुभागों और तत्वों को कैनवास में खींचकर लेआउट बनाते हैं, ड्रॉप लक्ष्य, पुनः व्यवस्थित करने और नेस्टिंग के साथ।
अपने स्वयं के तत्व प्रकारों को उनकी स्वयं की सेटिंग्स, बाधाओं और व्यवहार के साथ परिभाषित करें, और उन्हें हर प्रोजेक्ट में पुनः उपयोग करें।
उपयोगकर्ता पैनल से उपयोग के लिए तैयार अनुभाग खींचते हैं। उन्हें उन श्रेणियों में समूहित करें जो आपके उत्पाद की शब्दावली से मेल खाती हैं।
टाइपोग्राफी, रंग, रिक्ति और लेआउट नियंत्रण. प्रॉपर्टी सेट को प्रतिबंधित करें ताकि उपयोगकर्ता आपके डिज़ाइन सिस्टम से बाहर न निकल सकें.
डेस्कटॉप, टैबलेट और मोबाइल चौड़ाई के बीच कैनवास स्विच करें और जगह में ब्रेकपॉइंट-स्कोप शैलियों को लिखें।
पृष्ठ का एक संरचनात्मक वृक्ष, इसलिए एक गहरा नेस्टेड लेआउट selectable और पुनः व्यवस्थित रहता है।
छवियों और मीडिया के लिए एक परिसंपत्ति प्रबंधक, जो भी भंडारण या CDN आप पहले से ही उपयोग कर रहे हैं।
पुनः प्रयोज्य प्रारंभिक लेआउट, इसलिए एक नया पृष्ठ एक खाली कैनवास के बजाय कुछ के रूप में शुरू होता है।
वर्तमान दस्तावेज़ से HTML और CSS उत्पन्न करें, या प्रोजेक्ट डेटा लें और इसे अपने तरीके से प्रस्तुत करें।
एक सामान्य वेबसाइट बिल्डर और आपके उत्पाद में संबंधित बिल्डर के बीच का अंतर घटक सेट है। अपने सामग्री मॉडल को किसी और के तत्व प्रकारों में मजबूर न करें - अपना खुद का पंजीकरण करें।
प्रत्येक चरण संपादक उदाहरण पर सामान्य कॉन्फ़िगरेशन है: एक घटक प्रकार, एक ब्लॉक जो इसे सम्मिलित करता है, एक टेम्पलेट जो कई की व्यवस्था करता है, एक कमांड जो उन पर कार्य करता है, और एक पैनल जो इसे उजागर करता है।
// builder/registerProductBlocks.ts
import type { Editor } from 'grapesjs';
// A plugin is just a function that receives the editor, so everything below
// works identically in Vue, Nuxt, React or a plain HTML page.
export function registerProductBlocks(editor: Editor): void {
// A custom component type: your own element, with your own settings.
editor.DomComponents.addType('pricing-table', {
isComponent: (el) => el.dataset?.gjsType === 'pricing-table',
model: {
defaults: {
droppable: false,
traits: [
{ name: 'plan', type: 'select', options: ['free', 'pro', 'team'] },
{ name: 'highlight', type: 'checkbox' },
],
},
},
});
// A block: what the user actually drags in from the panel.
editor.BlockManager.add('pricing-table', {
label: 'Pricing',
category: 'Sections',
content: { type: 'pricing-table' },
});
}अपने उत्पाद को एक सामान्य वेबसाइट बिल्डर में मजबूर न करें। संपादक को अपने स्वयं के सामग्री मॉडल और डिज़ाइन सिस्टम के आसपास अनुकूलित करें।
एक अप्रतिबंधित कैनवास ऐसे पृष्ठ बनाता है जो उस उत्पाद को शर्मिंदा करते हैं जिसमें वे रहते हैं। संपादक दोनों दिशाओं में कॉन्फ़िगर करने योग्य है - उपयोगी सेटिंग अधिकतम स्वतंत्रता नहीं है, यह बाध्य स्वतंत्रता है।
उपयोगकर्ताओं को अपने उत्पाद के डिज़ाइन सिस्टम को तोड़ने की अनुमति दिए बिना रचनात्मक स्वतंत्रता दें।
पेज बिल्डर का उपयोग किया जाता है या नहीं, इसका सबसे बड़ा ड्राइवर पहली यात्रा पर ब्लॉक पैनल में इंतजार कर रहा है। उन अनुभागों का निर्माण करें जिनकी आपके उत्पाद को वास्तव में आवश्यकता है, या एक पुस्तकालय स्थापित करें और उसका नाम बदलें।
शीर्षक, सहायक पंक्ति और एक प्राथमिक कार्रवाई।
क्षमताओं या लाभों का एक दोहराया जाने वाला ग्रिड।
सुविधाओं और कार्रवाई के लिए कॉल के साथ स्तंभों की योजना बनाएं।
एट्रिब्यूशन के साथ उद्धरण, एक पंक्ति या हिंडोला में।
प्रश्न और उत्तर जोड़े, विस्तार योग्य या सपाट।
अपने स्वयं के समापन बिंदु पर पोस्ट करने वाला एक प्रपत्र अनुभाग।
एक स्पष्ट कार्रवाई के साथ एक पूर्ण-चौड़ाई वाला बैंड।
नेविगेशन कॉलम, कानूनी लिंक और ब्रांड मार्क.
GrapesJS कुछ भी होस्ट नहीं करता है और डेटाबेस नहीं चुनता है। आप दो तरीकों के साथ एक स्टोरेज एडाप्टर पंजीकृत करते हैं - लोड और स्टोर - और दोनों आपके API से बात करते हैं। आपके बुनियादी ढांचे को कुछ भी नहीं छोड़ता है।
संपादक केवल 'load()' और 'store()' के बारे में जानता है। जहां वे कॉल समाप्त होते हैं - Postgres, MySQL, मोंगो, S3, एक हेडलेस CMS - एक ऐसा निर्णय है जिसमें संपादक कभी भाग नहीं लेता है।
const editor = grapesjs.init({
container: host.value!,
storageManager: {
type: 'app-api',
autosave: true,
stepsBeforeSave: 10,
},
// Registered as a plugin so the adapter exists before the first load().
plugins: [
(ed) => {
ed.Storage.add('app-api', {
async load() {
const res = await fetch(`/api/projects/${props.projectId}`);
if (!res.ok) throw new Error(`Load failed: ${res.status}`);
return await res.json();
},
async store(project) {
const res = await fetch(`/api/projects/${props.projectId}`, {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(project),
});
if (!res.ok) throw new Error(`Save failed: ${res.status}`);
},
});
},
],
});आप अपने डेटा और अपने बैकएंड को नियंत्रित करते हैं। संपादक आपके ऐप के किसी भी अन्य भाग की तरह आपके API का ग्राहक है।
संपादक से दो कलाकृतियाँ निकलती हैं और वे विनिमेय नहीं होती हैं। गलत को संग्रहीत करना वह गलती है जो छह महीने बाद पृष्ठों को असंपादित करने योग्य बना देती है।
पूर्ण संपादन योग्य दस्तावेज़: घटक, शैलियाँ, संपत्ति, पृष्ठ। इसे वापस 'load()' पर फीड करें और उपयोगकर्ता ठीक वहीं से शुरू हो जाता है जहां उन्होंने छोड़ा था। यह वह पंक्ति है जिसे आपको कभी नहीं खोना चाहिए।
वर्तमान दस्तावेज़ का प्रतिपादन, मांग पर उत्पादित। इसे राज्य के रूप में मानने के बजाय प्रत्येक प्रकाशन पर पुनः उत्पन्न करें; इसे संपादन योग्य परियोजना में वापस नहीं बदला जा सकता है।
JSON वह है जो संपादक पढ़ता है। HTML वह है जो आपके आगंतुक पढ़ते हैं। केवल दूसरे को संग्रहीत करना एकतरफा दरवाजा है - पृष्ठ हमेशा के लिए प्रस्तुत करता है और इसे फिर कभी संपादित नहीं किया जा सकता है।
// The source of truth. Store it; the editor reloads from it.
const projectData = editor.getProjectData();
// The output. Regenerate it every time you publish.
const html = editor.getHtml();
const css = editor.getCss();
await $fetch(`/api/projects/${projectId}/publish`, {
method: 'POST',
body: { projectData, html, css },
});
// Authorize the request and sanitize `html` on the server —
// never in the component that produced it.फिर से संपादित करने के लिए
प्रकाशित करने के लिए
संपादन के लिए प्रोजेक्ट डेटा संग्रहीत करें। जब आपको प्रकाशन योग्य आउटपुट की आवश्यकता हो तो HTML और CSS उत्पन्न करें।
लेखन और प्रकाशन अलग-अलग काम हैं। GrapesJS उस समय समाप्त होता है जब कोई उपयोगकर्ता किसी पृष्ठ से खुश होता है; उसके बाद सब कुछ आपका वर्कफ़्लो है, आपके बुनियादी ढांचे पर।
समीक्षा, अनुमोदन या शेड्यूलिंग डालें जहां भी आपके उत्पाद की आवश्यकता है - संपादक के पास सहेजें और लाइव के बीच के चरणों के बारे में कोई राय नहीं है।
प्रकाशित आउटपुट कहां जा सकता है
GrapesJS संलेखन को संभालता है। आपका बुनियादी ढांचा प्रकाशन को संभालता है - संपादक के साथ कोई होस्टिंग नहीं है, और यह पृष्ठ अन्यथा दिखावा नहीं करेगा।
प्रत्येक ग्राहक को अपने स्वयं के पृष्ठ, अपनी संपत्ति, अपने स्वयं के टेम्पलेट और अपना स्वयं का ब्रांड मिलता है। वह अलगाव आपके डेटा मॉडल और आपके API की संपत्ति है - संपादक को बस सही प्रोजेक्ट सौंपा जाता है।
Your Vue SaaS
संगठन ए
संगठन बी
संगठन सी
आपका Vue ऐप और बैकएंड क्या लागू करते हैं
बहु-किरायेदारी GrapesJS सुविधा नहीं है। संपादक में कुछ भी इसे लागू नहीं करता है, और एक पेज बिल्डर जो सही किरायेदार चुनने के लिए क्लाइंट पर निर्भर करता है, वह बहु-किरायेदार नहीं है - यह UI सम्मेलन के साथ एक साझा डेटाबेस है।
इंटरफ़ेस में कुछ भी लाइब्रेरी की तरह नहीं दिखना चाहिए। पैनल, आइकन, शब्दांकन और वर्कफ़्लो सभी कॉन्फ़िगरेशन हैं - अधिकांश शिप किए गए GrapesJS बिल्डर्स GrapesJS के रूप में पहचानने योग्य नहीं हैं।
कस्टम लोगो, रंग, टाइपोग्राफी और पैनल क्रोम, यदि आप एजेंसियों को बेचते हैं तो प्रति ग्राहक लागू होता है।
व्हाइट-लेबल का अन्वेषण करेंपैनलों को पूरी तरह से पुनर्व्यवस्थित करें या बदलें, और संपादक को अपने Vue घटकों और आदेशों से चलाएं।
एम्बेडेड संपादक देखेंब्लॉक, श्रेणियों और क्रियाओं का नाम बदलकर उन शब्दों का रखें जिनका उपयोग आपके उपयोगकर्ता पहले से ही उनके लिए कर रहे हैं.
SaaS पैकेजिंग देखेंजो मौजूद नहीं है उसके बारे में स्पष्ट होने के लिए: GrapesJS के लिए कोई आधिकारिक Vue आवरण नहीं है और Vue-विशिष्ट प्लगइन GJS.Market नहीं है। आप 'grapesjs.init()' को 'onMounted' से स्वयं कॉल करते हैं, जो पांच पंक्तियाँ हैं, और कैटलॉग में प्रत्येक प्लगइन तब अपरिवर्तित काम करता है।
शीर्ष से शुरू करें और केवल उन परतों को जोड़ें जिन तक आपका उत्पाद वास्तव में पहुंचता है। अधिकांश बिल्डर कभी भी नीचे के आधे हिस्से से कुछ भी स्थापित नहीं करते हैं।
GJS.Market से वास्तविक लिस्टिंग, उनके द्वारा हटाई गई समस्या के आधार पर समूहीकृत। उनमें से हर एक उसी संपादक उदाहरण में स्थापित होता है जो आपका Vue घटक बनाता है।
समस्या: पहले रन पर एक खाली ब्लॉक पैनल। वे क्या जोड़ते हैं: तैयार अनुभाग, टेम्पलेट प्रबंधन और बहु-पृष्ठ परियोजनाएं। उनकी आवश्यकता किसे है: कोई भी जिसके उपयोगकर्ता डेवलपर नहीं हैं।
इस श्रेणी को ब्राउज़ करेंएक शुरुआती ब्लॉक सेट, इसलिए पैनल उपयोगी है इससे पहले कि आप अपना खुद का लिखें।
Tailwind-आधारित अनुभाग उन उत्पादों के लिए जिनकी डिज़ाइन प्रणाली पहले से ही Tailwind है।
सहेजें, सूचीबद्ध करें और पूरे लेआउट को पुनः प्रयोज्य शुरुआती बिंदुओं के रूप में लागू करें।
एक प्रोजेक्ट के अंदर कई पृष्ठ, उनके बीच नेविगेशन के साथ।
समस्या: खोया हुआ काम और हाथ से लुढ़का हुआ दृढ़ता। वे क्या जोड़ते हैं: परियोजना प्रबंधन, autosave, क्रैश रिकवरी और वैकल्पिक भंडारण बैक एंड्स। उनकी जरूरत किसे है: संपादक में वास्तविक ग्राहकों के साथ हर उत्पाद।
इस श्रेणी को ब्राउज़ करेंप्रोजेक्ट लिस्टिंग, निर्माण और स्विचिंग, प्रति मार्ग एक संपादक के बजाय।
क्रैश या बंद टैब के बाद सहेजे न गए काम को पुनर्प्राप्त करता है - विफलता उपयोगकर्ता कभी माफ नहीं करते हैं।
ब्राउज़र में स्थानीय दृढ़ता, ड्राफ्ट और ऑफ़लाइन संपादन के लिए उपयोगी।
एक कस्टम Directus बैकएंड के बजाय एक कस्टम API के माध्यम से परियोजनाओं को पढ़ता और लिखता है।
समस्या: छवि प्रबंधन और संपादक से आउटपुट प्राप्त करना। वे क्या जोड़ते हैं: विजेट, CDN एकीकरण, छवि संपादन और संग्रह निर्यात अपलोड करें। उनकी जरूरत किसे है: बिल्डर्स जहां उपयोगकर्ता अपना मीडिया लाते हैं।
इस श्रेणी को ब्राउज़ करेंCloudinary के माध्यम से संपादक मीडिया को अपलोड और परोसता है।
एक पूर्ण अपलोड अनुभव - ड्रैग-इन, प्रगति, कई स्रोत।
पहले के बजाय संपादक के अंदर छवियों को क्रॉप करें, आकार बदलें और समायोजित करें।
वर्तमान प्रोजेक्ट को HTML/CSS संग्रह के रूप में डाउनलोड करता है।
समस्या: संपादन सतह आपके उपयोगकर्ताओं की अपेक्षा से पतली है। वे क्या जोड़ते हैं: समृद्ध पाठ संपादन, प्रपत्र, ब्रेकपॉइंट नियंत्रण और प्रति-घटक कोड। उनकी आवश्यकता किसे है: मौजूदा संपादक की जगह लेने वाली टीमें।
इस श्रेणी को ब्राउज़ करेंअंतर्निहित उपकरण पट्टी से परे इनलाइन पाठ संपादन का विस्तार करता है.
इनपुट एकत्र करने वाले बिल्डरों के लिए टाइप किए गए फ़ील्ड के साथ घटकों का निर्माण करें।
तीन डिफ़ॉल्ट से परे ब्रेकपॉइंट और डिवाइस की चौड़ाई प्रबंधित करें।
प्रति-घटक HTML/CSS उन उपयोगकर्ताओं के लिए संपादन जो इसे चाहते हैं।
वही कैटलॉग, आपके द्वारा बनाए जा रहे उत्पाद द्वारा काटा जाता है। उस स्टैक को स्थापित करें जो आपके मामले से मेल खाता हो और बाकी को अनदेखा करें - लोड किए गए प्रत्येक प्लगइन के साथ एक संपादक धीमा और उपयोग करने में कठिन है, बेहतर नहीं।
ग्राहक आपके उत्पाद के अंदर अपने स्वयं के पृष्ठों को संपादित कर रहे हैं।
सामग्री टीमें संरचित सामग्री को नेत्रहीन रूप से संपादित कर रही हैं।
पूर्ण साइट निर्माण, बहु-खंड और उत्तरदायी।
अभियान और लेन-देन संबंधी टेम्पलेट, वेब पेज नहीं.
समीक्षा, भूमिकाओं और अनुमोदनों के साथ बाध्य संपादन।
दिखाई गई कीमतें वर्तमान GJS.Market लिस्टिंग कीमतें हैं; मुफ्त प्लगइन्स चिह्नित हैं।
यदि ऊपर दिया गया स्टैक आपके उत्पाद से मेल नहीं खाता है, तो इसके बजाय यहां से शुरू करें। ये कैटलॉग अनुभाग हैं, मोटे तौर पर एक बिल्डर के रूप में उनमें बढ़ता है।
कोई भी कॉलम मुफ्त नहीं है। सवाल केवल यह है कि आपकी टीम को अपना समय किसमें बिताना चाहिए।
| विचार | इसे घर में बनाएं | GJS.Market से स्थापित करें |
|---|---|---|
| क्षमता प्राप्त करना | आपके रोडमैप पर विकास का समय | स्थापित करें और कॉन्फ़िगर करें |
| इसे काम करते रहना | आप इसे हमेशा के लिए बनाए रखें | एक प्रकाशित पैकेज के रूप में बनाए रखा |
| पुनः उपयोग | केवल आंतरिक कोड | एक समाधान अन्य उत्पाद पहले से ही चल रहे हैं |
| कार्यक्षेत्र | आप हर सुविधा का निर्माण स्वयं करते हैं | केवल वही जोड़ें जो आपके उत्पाद की आवश्यकता है |
| लागत कहां गिरती है | इंजीनियरिंग समय | एक लिस्टिंग मूल्य, एक बार |
| आपकी टीम किस पर काम करती है | Editor बुनियादी ढांचा | आपका उत्पाद |
इस तालिका में उद्देश्य पर कोई लागत या समय के आंकड़े दिखाई नहीं देते हैं - हम आपकी टीम को नहीं जानते हैं, और यहां किसी भी संख्या का आविष्कार किया जाएगा।
पंक्ति दर पंक्ति, आप स्वयं क्या लिख रहे होंगे और क्या पहले से मौजूद है। "एक्स्टेंसिबल" का अर्थ है कि इंजन हुक प्रदान करता है और आप व्यवहार की आपूर्ति करते हैं - आमतौर पर कुछ पंक्तियाँ, कभी-कभी एक प्लगइन।
| योग्यता | खरोंच से | GrapesJS |
|---|---|---|
| कैनवास का संपादन | निर्माण | शामिल |
| खींचें और छोड़ें | निर्माण | शामिल |
| Component मॉडल | निर्माण | शामिल |
| ब्लॉक | निर्माण | एक्स्टेंसिबल |
| Style Manager | निर्माण | शामिल |
| उत्तरदायी संपादन | निर्माण | शामिल |
| परत का पेड़ | निर्माण | शामिल |
| पूर्ववत करें और फिर से करें | निर्माण | शामिल |
| संपत्ति | निर्माण | एक्स्टेंसिबल |
| टेम्पलेट्स | निर्माण | एक्स्टेंसिबल |
| भंडार | निर्माण | एक्स्टेंसिबल |
| HTML/CSS निर्यात | निर्माण | शामिल |
| Vue कैनवास में घटक | निर्माण | शामिल नहीं है - कैनवास DOM प्रस्तुत करता है |
| बहु-किरायेदारी, भूमिकाएँ, प्रकाशन | निर्माण | शामिल नहीं है - आपका आवेदन |
शामिल = कोर के साथ जहाज। एक्स्टेंसिबल = एक प्रलेखित एक्सटेंशन बिंदु, प्लस प्लगइन्स जहां वे मौजूद हैं।
GrapesJS 0.23.6 पर 2026-09-02 के खिलाफ सत्यापित।
अपना Vue उत्पाद बनाएं। विज़ुअल एडिटर का पुनर्निर्माण न करें।
पांच चरण, एक घटक। कोई आधिकारिक Vue आवरण नहीं है और आपको इसकी आवश्यकता नहीं है: GrapesJS एक सादे तत्व में प्रस्तुत होता है, इसलिए एकमात्र Vue-विशिष्ट प्रश्न यह है कि कौन सा जीवनचक्र हुक 'init()' कहता है। grapesjs 0.23.6 स्थापित करें, घटक बनाएं, माउंट पर प्रारंभ करें, अपने प्लगइन्स पास करें, अनमाउंट पर नष्ट करें।
npm install grapesjs<!-- components/PageBuilder.vue -->
<template>
<div ref="host" class="page-builder" />
</template>
<script setup lang="ts">
import { onBeforeUnmount, onMounted, ref, shallowRef } from 'vue';
import grapesjs, { type Editor } from 'grapesjs';
import 'grapesjs/dist/css/grapes.min.css';
// shallowRef, not ref: the editor is a large non-reactive instance and
// deep-proxying it costs performance for nothing.
const editor = shallowRef<Editor | null>(null);
const host = ref<HTMLElement | null>(null);
onMounted(() => {
editor.value = grapesjs.init({
container: host.value!,
height: '100%',
fromElement: false,
storageManager: false,
plugins: [], // GJS.Market plugins go here
blockManager: { blocks: [] },
});
});
onBeforeUnmount(() => {
editor.value?.destroy();
editor.value = null;
});
</script>GrapesJS को एक ब्राउज़र DOM की आवश्यकता है। Nuxt के सर्वर रेंडर के तहत कोई 'दस्तावेज़' नहीं है, इसलिए क्लाइंट पर संपादक बनाना होगा - जो 'onMounted' पहले से ही गारंटी देता है। '<ClientOnly>' बेल्ट-एंड-ब्रेसिज़ संस्करण है, और यह वह जगह है जहां फ़ॉलबैक मार्कअप रहता है।
सर्वर संपादक के चारों ओर सब कुछ प्रस्तुत करता है; ब्राउज़र में घटक माउंट होने के बाद संपादक स्वयं दिखाई देता है।
<!-- pages/editor.vue -->
<template>
<ClientOnly>
<PageBuilder :project-id="route.params.id" />
<template #fallback>
<p class="editor-placeholder">Loading the editor…</p>
</template>
</ClientOnly>
</template>
<script setup lang="ts">
const route = useRoute();
</script>पुनः पेश किया गया, माना नहीं गया
Node पर बिना DOM सादे 2026-09-02 में चलाएं। अंतर मायने रखता है: आयात सुरक्षित है, इसलिए बंडल सर्वर-सुरक्षित रखने के लिए आपको डायनेमिक आयात की आवश्यकता नहीं है - आपको ब्राउज़र में होने के लिए इनिट कॉल की आवश्यकता है।
इनमें से प्रत्येक शुरुआत में सही हो सकता है और ग्राहकों के संपादक में आने के बाद इसे ठीक करना महंगा है।
गलती
सर्वर पर चलने वाले कहीं भी 'init()' को कॉल करना फेंकता है, क्योंकि कैनवास को प्रस्तुत करने के लिए कोई 'दस्तावेज़' नहीं है।
इसके बजाय क्या करें
संपादक को केवल 'onMounted' में बनाएं, और यदि आप सर्वर-रेंडर फ़ॉलबैक चाहते हैं तो मार्ग को '<ClientOnly>' में लपेटें।
गलती
रेंडर किए गए आउटपुट को वापस संपादन योग्य दस्तावेज़ में नहीं बदला जा सकता है। इस तरह से सहेजा गया प्रत्येक पृष्ठ प्रकाशित होते ही फ्रीज हो जाता है।
इसके बजाय क्या करें
प्रोजेक्ट JSON को सत्य के स्रोत के रूप में संग्रहीत करें और जब भी आप प्रकाशित करें तो HTML और CSS को पुनर्जीवित करें।
गलती
कुल स्वतंत्रता ऐसे पृष्ठ तैयार करता है जो आपके डिज़ाइन सिस्टम को तोड़ते हैं, और पैनल में कुछ भी नहीं होने के साथ पहली बार चलने का अनुभव कोई पृष्ठ नहीं बनाता है।
इसके बजाय क्या करें
क्यूरेटेड ब्लॉक और टेम्प्लेट शिप करें, और उन स्टाइल गुणों को बाधित करें जिन तक उपयोगकर्ता पहुंच सकते हैं।
गलती
प्रत्येक प्लगइन पैनल, बंडल वजन और एक सतह जोड़ता है जिसे आपके उपयोगकर्ताओं को समझना होगा। एक भीड़ भरे संपादक का उपयोग करना कठिन है, अधिक सक्षम नहीं।
इसके बजाय क्या करें
अपने उत्पाद के आकार के लिए स्टैक से शुरू करें और एक प्लगइन जोड़ें जब कोई वास्तविक आवश्यकता दिखाई दे।
वे चीजें जो एक कार्यशील डेमो को किसी ऐसी चीज़ से अलग करती हैं जिसे आप भुगतान करने वाले ग्राहकों के सामने रख सकते हैं।
उदाहरण हर मार्ग परिवर्तन में सही ढंग से व्यवहार करता है।
उपयोगकर्ता द्वारा टाइप किया गया कुछ भी खो नहीं सकता है।
एक गैर-डेवलपर बिना सहायता के एक अच्छा पेज तैयार कर सकता है।
पहले रन का अनुभव फीचर गिनती से अधिक गोद लेने का फैसला करता है।
हर नियम लागू होता है जहां ग्राहक उस तक नहीं पहुंच सकता।
स्वीकृत ड्राफ़्ट से लाइव URL तक का पथ निर्धारित किया गया है.
संपादक एक भारी निर्भरता है और यह ठीक एक मार्ग पर है। एक बिल्डर में अधिकांश प्रदर्शन समस्याएं इसे लोड करने से आती हैं जहां इसकी आवश्यकता नहीं होती है।
एक पेज बिल्डर उपयोगकर्ताओं से मनमाने ढंग से सामग्री स्वीकार करता है और इसे अन्य लोगों द्वारा देखे जाने वाले पृष्ठों में बदल देता है। प्रत्येक इनपुट को अविश्वसनीय और प्रत्येक क्लाइंट-साइड नियम को सजावटी के रूप में मानें।
कभी भी केवल क्लाइंट-साइड अनुमतियों पर भरोसा न करें।
विभिन्न उत्पाद, एक वास्तुकला। यदि आप यहां अपनी टीम को पहचानते हैं, तो इस पृष्ठ का बाकी हिस्सा आपके लिए लिखा गया है।
किसी मौजूदा उत्पाद में विज़ुअल संपादन जोड़ना ताकि ग्राहक सामग्री परिवर्तनों के लिए टिकट दाखिल करना बंद कर दें.
प्रति क्लाइंट एक कस्टम संपादन अनुभव का निर्माण, एक कोडबेस पर वे बनाए रखते हैं।
ग्राहकों को सामग्री पर दृश्य संपादन देना प्लेटफ़ॉर्म पहले से ही मॉडल है।
अभियान टीमों को लूप में किसी डेवलपर के बिना पृष्ठ लॉन्च करने की अनुमति देना.
भूमिकाओं, समीक्षा और अनुमोदन के साथ नियंत्रित आंतरिक संपादन वर्कफ़्लो बनाना।
Vue एप्लिकेशन के अंदर एक विज़ुअल एडिटर जो किसी को मार्कअप लिखने के बजाय कैनवास पर अनुभागों को खींचकर एक पृष्ठ को इकट्ठा करने और स्टाइल करने देता है। Vue ऐप मार्गों, उपयोगकर्ताओं और डेटा की आपूर्ति करता है; संपादक कैनवास की आपूर्ति करता है।
हाँ। GrapesJS एक सादे DOM तत्व में बदल जाता है, इसलिए आप इसे 'onMounted' के अंदर बनाते हैं और इसे 'onBeforeUnmount' में नष्ट कर देते हैं। इसमें कोई रैपर लाइब्रेरी शामिल नहीं है।
हाँ। संपादक क्लाइंट पर बनाया गया है; 'onMounted' पहले से ही इसकी गारंटी देता है, और '<ClientOnly>' आपको इसके चारों ओर सर्वर-रेंडर फ़ॉलबैक देता है।
मॉड्यूल आयात करना सर्वर पर सुरक्षित है - केवल 'init()' के लिए DOM की आवश्यकता होती है। तो आसपास का पृष्ठ सर्वर-रेंडर सामान्य रूप से होता है और ब्राउज़र में घटक माउंट होने के बाद संपादक दिखाई देता है।
यह एक फ्रेमवर्क-अज्ञेयवादी संपादन इंजन है, न कि Vue लाइब्रेरी। यह एक Vue पेज बिल्डर बन जाता है जब आप इसे Vue घटक में माउंट करते हैं और इसे अपने स्वयं के भंडारण और प्रकाशन से जोड़ते हैं।
पैकेज स्थापित करें, एक कंटेनर तत्व के साथ एक घटक जोड़ें, अपने प्लगइन्स और ब्लॉक के साथ 'grapesjs.init()' में 'onMounted' पर कॉल करें, और अनमाउंट पर 'destroy()' पर कॉल करें। पूरी गाइड में इवेंट, कंपोजेबल और रैपर शामिल हैं।
हां, और यह स्वाभाविक फिट है - जीवनचक्र हुक ठीक वहीं हैं जहां सृजन और आंसू हैं। उदाहरण को 'रेफरी' के बजाय 'shallowRef' में रखें।
नहीं। एक आधिकारिक React आवरण है, लेकिन Vue के लिए कुछ भी नहीं है; npm पर पैकेज Vue 2 को लक्षित करता है और 2022 से अपडेट नहीं किया गया है। 'init()' को स्वयं कॉल करना लगभग पाँच पंक्तियाँ हैं और अनुरक्षित कोड पर निर्भर होने से बचता है।
हाँ। Blocks संपादक के Block Manager पर आपके स्वयं के मार्कअप, लेबल और श्रेणी के साथ पंजीकृत हैं, और आप उन्हें समूहित कर सकते हैं हालांकि आपके उत्पाद की शब्दावली काम करती है।
हाँ। अपने स्वयं के घटक प्रकारों को उनकी स्वयं की सेटिंग्स, बाधाओं और व्यवहार के साथ परिभाषित करें, फिर उन्हें ब्लॉक के रूप में उजागर करें। इस तरह एक बिल्डर सामान्य दिखना बंद कर देता है।
नहीं। कैनवास एक पृथक दस्तावेज़ है जो सादा DOM प्रस्तुत करता है, इसलिए यह HTML और CSS घटकों को माउंट करने के बजाय Vue को संपादित करता है। आपका आवेदन Vue है; संपादित पृष्ठ मार्कअप है जो आपका ऐप अपनी पसंद के अनुसार प्रस्तुत कर सकता है।
हाँ। पूरे लेआउट को शुरुआती बिंदुओं के रूप में सहेजें, या तो अपने स्वयं के भंडारण के माध्यम से या कैटलॉग से टेम्पलेट प्रबंधन प्लगइन के साथ।
हाँ, और यही इच्छित डिज़ाइन है। आप 'लोड' और 'स्टोर' विधियों के साथ एक स्टोरेज एडेप्टर पंजीकृत करते हैं जो आपके API को कॉल करते हैं - संपादक कभी भी आपके डेटाबेस से सीधे बात नहीं करता है।
प्रोजेक्ट JSON को स्टोर करें: यह सत्य का संपादन योग्य स्रोत है जिसे संपादक पुनः लोड करता है। प्रकाशित करते समय HTML और CSS उत्पन्न करें। केवल HTML संग्रहीत करने से पृष्ठ स्थायी रूप से असंपादित हो जाता है।
हाँ। आपका Vue ऐप खातों, योजनाओं और रूटिंग को संभालता है; संपादक संलेखन संभालता है; आपका API परियोजनाओं को संभालता है। यह संयोजन एक उत्पाद के रूप में बेचे जाने वाले बिल्डर के लिए सामान्य आकार है।
हां, लेकिन किरायेदारी आपके आवेदन और आपके डेटाबेस में रहती है, संपादक में नहीं। किरायेदार द्वारा प्रत्येक परियोजना, संपत्ति और टेम्पलेट को स्कोप करें और इसे सर्वर-साइड लागू करें।
हाँ। लोगो, रंग, पैनल, शब्दावली और उपलब्ध ब्लॉक सभी कॉन्फ़िगरेशन हैं, इसलिए प्रत्येक ग्राहक को एक ऐसा वातावरण दिया जा सकता है जो आपके उत्पाद जैसा दिखता है।
हाँ - यह सबसे आम पहला संस्करण है। मार्केटिंग अनुभागों का एक छोटा सा सेट तैयार करें, टेम्पलेट जोड़ें, और मार्केटिंग टीम को अपनी मौजूदा पाइपलाइन के माध्यम से प्रकाशित करने दें।
हाँ. ऐसे घटक प्रकार पंजीकृत करें जो आपके सामग्री मॉडल को प्रतिबिंबित करते हैं, ताकि संपादक फ़्री-फ़ॉर्म मार्कअप के बजाय आपके निकायों के साथ विज़ुअल रूप से कार्य करें.
हाँ। एक प्लगइन एक फ़ंक्शन है जो संपादक इंस्टेंस प्राप्त करता है, इसलिए संपूर्ण GJS.Market कैटलॉग Vue ऐप में अपरिवर्तित काम करता है - देखने के लिए कोई Vue-विशिष्ट संस्करण नहीं है।
हाँ। कोर BSD-3-Clause लाइसेंस प्राप्त है, जो आपके द्वारा बेचे जाने वाले उत्पाद के अंदर सहित व्यावसायिक उपयोग की अनुमति देता है। आपके द्वारा इंस्टॉल किए गए किसी भी प्लगइन के व्यक्तिगत लाइसेंस की जाँच करें।
GrapesJS को Vue या Nuxt के साथ एकीकृत करने, कस्टम ब्लॉक और घटक बनाने, अपने बैकएंड को जोड़ने या उत्पादन-तैयार संपादन वर्कफ़्लो बनाने में सहायता चाहिए? हम वह काम करते हैं।
उन टीमों के लिए जो संपादक के बुनियादी ढांचे के बजाय उत्पाद को शिप करना पसंद करेंगे।
अपने एप्लिकेशन के लिए Vue और विज़ुअल संपादन अनुभव के लिए GrapesJS का उपयोग करें। अपने स्वयं के घटक, ब्लॉक, टेम्पलेट, भंडारण और प्रकाशन वर्कफ़्लो जोड़ें - फिर बिल्डर को GJS.Market प्लगइन्स के साथ विस्तारित करें जब आपको अधिक की आवश्यकता हो।
पांच चरण और एक घटक। पैकेज इंस्टॉल करें और आज दोपहर अपने Vue ऐप में एक संपादक चलाएं।
शुरू हो जाओब्लॉक, टेम्प्लेट, भंडारण, संपत्ति और निर्यात - उन क्षमताओं को स्थापित करें जिन्हें आप अन्यथा रोडमैप पर रखेंगे।
प्लगइन्स ब्राउज़ करेंएकीकरण, कस्टम घटक, बैकएंड वायरिंग और एक उत्पादन संपादन वर्कफ़्लो, आपकी टीम के साथ बनाया गया है।
हमसे बात करोआपका Vue ऐप। आपका संपादक। आपका उत्पाद।