प्रौद्योगिकी पृष्ठभूमि
💻 NOCOBASE DEVELOPER GUIDE

डेवलपर मार्गदर्शिका प्लगइन विकास और गहन अनुकूलन

आसानी से मास्टर NocoBase प्लगइन विकास और उन्नत अनुकूलन क्षमताएँ

मुख्य वास्तुकलाNocoBase आर्किटेक्चर डिज़ाइन में गहराई से उतरें

प्लगइन विकासप्लगइन विकास की पूरी प्रक्रिया

गहन अनुकूलनप्रणाली-स्तरीय अनुकूलन और विस्तार

🏗️ मुख्य वास्तुकला 🔌 प्लगइन विकास 🛠️ गहरी अनुकूलन 📝 सर्वोत्तम प्रथाएँ

🏗️ मुख्य वास्तुकला

प्लगइन विकास और अनुकूलन के लिए आधार तैयार करने हेतु NocoBase के आर्किटेक्चरल डिज़ाइन की गहन समझ प्राप्त करें।

वास्तुकला अवलोकन

NocoBase एक मॉड्यूलर आर्किटेक्चर डिज़ाइन का उपयोग करता है, जिसमें निम्नलिखित मुख्य घटक शामिल हैं:

  • मुख्य मॉड्यूल: बुनियादी ढांचा और मुख्य कार्यक्षमताओं, जैसे उपयोगकर्ता प्रमाणीकरण और अनुमति प्रबंधन, प्रदान करता है।
  • प्लगइन सिस्टमप्लगइन्स के माध्यम से कार्यक्षमता का विस्तार करने का समर्थन NocoBase की एक मुख्य विशेषता है।
  • डेटाबेस सार लेयरकई डेटाबेस का समर्थन करता है और एक एकीकृत संचालन इंटरफ़ेस प्रदान करता है।
  • फ्रंटएंड फ्रेमवर्कReact पर आधारित फ्रंट-एंड कार्यान्वयन, जो एक दृश्य विन्यास इंटरफ़ेस प्रदान करता है।
  • एपीआई परतRESTful एपीआई प्रदान करता है, जो फ्रंट-एंड/बैक-एंड विभाजन और तृतीय-पक्ष एकीकरण का समर्थन करता है।

प्लगइन सिस्टम

NocoBase की विस्तारशीलता के केंद्र में स्थित प्लगइन सिस्टम में निम्नलिखित प्रमुख विशेषताएँ हैं:

  • मॉड्यूलर डिज़ाइनप्रत्येक प्लगइन एक स्वतंत्र मॉड्यूल है जिसे अलग से इंस्टॉल और अनइंस्टॉल किया जा सकता है।
  • निर्भरता प्रबंधनप्लगइन्स एक-दूसरे पर निर्भरताएँ घोषित कर सकते हैं, और सिस्टम स्वचालित रूप से उनके लोडिंग क्रम का प्रबंधन करता है।
  • हुक प्रणालीयह प्लगइन्स को विशिष्ट बिंदुओं पर कोड निष्पादित करने में सक्षम बनाने वाले हुक्स का एक समृद्ध सेट प्रदान करता है।
  • संरचना प्रबंधनप्लगइन्स अपनी स्वयं की कॉन्फ़िगरेशन आइटम परिभाषित कर सकते हैं, जिन्हें सिस्टम इंटरफ़ेस के माध्यम से प्रबंधित किया जाता है।
  • फ्रंट-एंड एकीकरणप्लगइन्स एक साथ बैकएंड लॉजिक और फ्रंटएंड कंपोनेंट्स को शामिल करके पूर्ण कार्यक्षमता प्रदान कर सकते हैं।

आर्किटेक्चरल लेयर्स

श्रेणीबद्ध संरचना

फ्रंट-एंड एप्लिकेशन परत React + Ant Design
एपीआई परत RESTful API
व्यावसायिक तर्क परत मुख्य मॉड्यूल + प्लगइन्स
डेटा पहुँच परत डेटाबेस सार परत
भंडारण परत PostgreSQL / MySQL

🔌 प्लगइन विकास ट्यूटोरियल

प्लगइन विकास की पूरी प्रक्रिया, निर्माण से लेकर रिलीज़ तक

प्लगइन विकास प्रक्रिया

1

प्लगइन बनाएँ

NocoBase द्वारा प्रदान की गई प्लगइन स्कैफ़ोल्डिंग का उपयोग करके एक नया प्लगइन बनाएँ।

# NocoBase प्रोजेक्ट की रूट डायरेक्टरी में, चलाएँ: npm run create-plugin my-plugin
2

प्लगइन आर्किटेक्चर

प्लगइन्स की मूल संरचना और कॉन्फ़िगरेशन फ़ाइलों को समझना

my-plugin/ ├── package.json # प्लगइन कॉन्फ़िगरेशन ├── src/ │ ├── server/ # बैकएंड कोड │ ├── client/ # फ्रंटएंड कोड │ └── index.ts # प्लगइन एंट्री पॉइंट └── README.md # प्लगइन दस्तावेज़ीकरण
3

बैकएंड कार्यक्षमता का कार्यान्वयन

सर्वर निर्देशिका के भीतर बैकएंड लॉजिक लागू करना

// src/server/index.ts import { Plugin } from '@nocobase/server'; export class MyPlugin extends Plugin { async load() { // Register API route this.app.router.get('/api/my-plugin/hello', async (ctx) => { ctx.body = { message: 'मेरे प्लगइन से हैलो!' }; }); // हुक रजिस्टर करें this.app.on('beforeLoad', async () => { // प्लगइन लोड होने से पहले का लॉजिक }); } } export default MyPlugin;
4

फ्रंट-एंड कार्यक्षमता लागू करें

क्लाइंट निर्देशिका के भीतर फ्रंट-एंड कंपोनेंट्स लागू करें

// src/client/index.tsx import React from 'react'; import { Plugin } from '@nocobase/client'; export class MyPluginClient extends Plugin { async load() { // फ्रंटएंड रूट रजिस्टर करें this.app.router.add('my-plugin', { path: '/my-plugin', component: () =>
My Plugin Page
}); // मेनू पंजीकृत करें this.app.menu.add('my-plugin', { name: 'My Plugin', icon: 'Settings', path: '/my-plugin' }); } } export default MyPluginClient;
5

प्लग-इन कॉन्फ़िगर करें

package.json में प्लगइन जानकारी कॉन्फ़िगर करें

// package.json { "name": "my-plugin", "version": "1.0.0", "description": "My NocoBase plugin", "main": "lib/index.js", "nocobase": { "type": "plugin", "name": "my-plugin", "title": "My Plugin", "description": "This is my plugin", "icon": "Settings" }, "dependencies": { "@nocobase/server": "^1.0.0", "@nocobase/client": "^1.0.0" } }
6

बनाएँ और स्थापित करें

प्लगइन बनाएं और इसे NocoBase में इंस्टॉल करें।

# प्लगइन बनाएं cd my-plugin npm install npm run build # NocoBase में इंस्टॉल करें cd .. npm install ./packages/plugins/my-plugin # NocoBase शुरू करें npm run dev

🛠️ गहरी अनुकूलन

जटिल व्यावसायिक आवश्यकताओं को पूरा करने के लिए सिस्टम-स्तरीय अनुकूलन और विस्तार

कोर मॉड्यूल अनुकूलन

मुख्य कार्यक्षमता को संशोधित करें

कोर मॉड्यूलों को पुनः लिखकर या विस्तारित करके कार्यात्मक अनुकूलन प्राप्त करना

हुक प्रणाली

कार्यप्रवाह के विशिष्ट बिंदुओं पर कस्टम लॉजिक निष्पादित करने के लिए सिस्टम द्वारा प्रदान किए गए हुक्स का उपयोग करें।

डेटाबेस अनुकूलन

कस्टम फ़ील्ड और संबंध जोड़कर डेटाबेस मॉडल का विस्तार करें।

फ्रंट-एंड अनुकूलन

कस्टम घटक

डिफ़ॉल्ट घटकों को बदलने या उनका विस्तार करने के लिए कस्टम फ्रंट-एंड घटक विकसित करें।

थीम अनुकूलन

सिस्टम थीम को अनुकूलित करें, जिसमें रंग, फ़ॉन्ट, लेआउट और अन्य शामिल हैं।

रूटिंग अनुकूलन

नए पेज और नेविगेशन जोड़ने के लिए फ्रंट-एंड राउटिंग को अनुकूलित करें।

अनुकूलन उदाहरण

उदाहरण 1: एक कस्टम एपीआई जोड़ना

// प्लगइन की server/index.ts फ़ाइल में import { Plugin } from '@nocobase/server'; export class MyPlugin extends Plugin { async load() { // कस्टम API रूट जोड़ें this.app.router.get('/api/custom/hello', async (ctx) => { // कस्टम लॉजिक लागू करें const { name } = ctx.query; ctx.body = { message: `Hello, ${name || 'world'}!`, timestamp: new Date().toISOString() }; } } } const { name } = ctx.query; ctx.body = { message: `Hello, ${name || 'world'}!`, timestamp: new Date().toISOString() }; }); // प्रमाणीकरण की आवश्यकता वाला एक API जोड़ें this.app.router.post('/api/custom/protected', this.app.authMiddleware(), async (ctx) => { // केवल प्रमाणीकृत उपयोगकर्ता ही एक्सेस कर सकते हैं const user = ctx.state.currentUser; ctx.body = { message: 'यह एक संरक्षित API है', user: { id: user.id, username: user.username } }; }); } } export default MyPlugin;

उदाहरण 2: कस्टम फ्रंट-एंड कंपोनेंट्स

// प्लगइन के client/components/MyComponent.tsx में import React from 'react'; import { Button, Card, Typography } from 'antd'; const { Title, Paragraph } = Typography; export const MyComponent: React.FC = () => { const [count, setCount] = React.useState(0); return ( Counter Current count: {count} ); }; // प्लगइन के client/index.tsx में रजिस्टर करें import { Plugin } from '@nocobase/client'; import { MyComponent } from './components/MyComponent'; export class MyPluginClient extends Plugin { async load() { // कंपोनेंट रजिस्टर करें this.app.components.register('MyComponent', MyComponent); // रूट जोड़ें this.app.router.add('my-plugin', { path: '/my-plugin', component: MyComponent }); } } this.app.components.register('MyComponent', MyComponent); // रूट जोड़ें this.app.router.add('my-plugin', { path: '/my-plugin', component: MyComponent }); } } export default MyPluginClient;

📝 सर्वोत्तम प्रथाएँ

प्लगइन विकास और अनुकूलन के लिए सर्वोत्तम प्रथाएँ, जो कोड की गुणवत्ता और रखरखाव क्षमता सुनिश्चित करती हैं।

विकास विनिर्देश

कोड विनिर्देश

  • ESLint और Prettier के कन्वेंशन्स का पालन करें।
  • टाइप सुरक्षा सुनिश्चित करने के लिए टाइपस्क्रिप्ट का उपयोग
  • स्पष्ट टिप्पणियाँ और दस्तावेज़ीकरण लिखें

प्लगइन डिज़ाइन

  • एकल जिम्मेदारी सिद्धांत: प्रत्येक प्लगइन को केवल एक ही काम करना चाहिए।
  • उचित डिफ़ॉल्ट विन्यास प्रदान करें
  • प्लगइन्स की परीक्षणक्षमता पर विचार करें।

प्रदर्शन अनुकूलन

फ्रंट-एंड अनुकूलन

  • React.memo और useMemo का उपयोग करके रेंडरिंग को अनुकूलित करना
  • `useCallback` फ़ंक्शन कैशिंग तंत्र का उचित उपयोग
  • अनावश्यक री-रेंडरिंग से बचने के लिए घटक संरचना को अनुकूलित करें।

बैकएंड अनुकूलन

  • डेटाबेस इंडेक्स का उपयोग करके क्वेरीज़ का अनुकूलन
  • कैशिंग के विवेकपूर्ण उपयोग के माध्यम से डेटाबेस क्वेरीज़ को अनुकूलित करें।
  • अत्यधिक डेटा लौटाने से बचने के लिए एपीआई प्रतिक्रियाओं को अनुकूलित करें।

अक्सर पूछे जाने वाले प्रश्न

प्रश्न: प्लगइन विकास के दौरान डिबग कैसे किया जाता है?

A: NocoBase के डेवलपमेंट मोड का उपयोग करके, चलाएँnpm run devडेवलपमेंट सर्वर लॉन्च करें, जो हॉट रीलोडिंग का समर्थन करता है। फ्रंट-एंड डेवलपर्स डिबगिंग के लिए Chrome DevTools का उपयोग कर सकते हैं, जबकि बैक-एंड डेवलपर्स VS Code में डिबगिंग के लिए ब्रेकपॉइंट सेट कर सकते हैं।

प्रश्न: प्लगइन्स के बीच निर्भरताओं को कैसे संभाला जाना चाहिए?

A: plugin की package.json फ़ाइल में dependencies सेक्शन के माध्यम से निर्भरताएँ घोषित करने से NocoBase स्वचालित रूप से plugin लोडिंग अनुक्रम का प्रबंधन कर सकता है। वैकल्पिक रूप से, आप plugin के load मेथड में यह जाँच सकते हैं कि अन्य plugins लोड हुए हैं या नहीं।

प्रश्न: यह प्लगइन डेटाबेस तक कैसे पहुँचता है?

A: उत्तीर्णthis.app.dbडेटाबेस इंस्टेंस तक पहुँचने के लिए, आप डेटाबेस संचालन के लिए Sequelize ORM का उपयोग कर सकते हैं। उदाहरण के लिए:const User = this.app.db.getModel('users');

प्रश्न: मैं एक प्लगइन को प्लगइन मार्केटप्लेस में कैसे प्रकाशित करूँ?

A: सबसे पहले, सुनिश्चित करें कि प्लगइन रिलीज़ विनिर्देशों के अनुरूप है। फिर NocoBase प्लगइन मार्केटप्लेस पर एक खाता पंजीकृत करें और निर्देशों के अनुसार प्लगइन जमा करें। आपको प्लगइन का नाम, विवरण, संस्करण जानकारी और बिल्ड आर्टिफैक्ट्स प्रदान करने होंगे।