ब्लॉक लाइब्रेरी पब्लिश करें

ब्लॉक डेफ़िनिशन की लाइब्रेरी उपलब्ध कराने वाले प्लग इन, Blockly कम्यूनिटी के साथ फिर से इस्तेमाल किए जा सकने वाले ब्लॉक शेयर करने का एक बेहतरीन तरीका हैं. आपकी ब्लॉक लाइब्रेरी को ज़्यादा से ज़्यादा काम का और बेहतर बनाने के लिए, हमने ये दिशा-निर्देश बनाए हैं.

दिशा-निर्देश

  • उपयोगकर्ताओं के लिए, आपके सभी ब्लॉक इंस्टॉल करना आसान बनाएं. साथ ही, उन्हें सिर्फ़ अपने चुने गए कुछ ब्लॉक या ब्लॉक के कुछ हिस्से इंस्टॉल करने की सुविधा दें.
    • सभी चीज़ों को आसानी से इंस्टॉल करें: ऐसा करने के लिए, एक ऐसा फ़ंक्शन दें जो हर उस चीज़ को इंस्टॉल करता हो जिसकी ज़रूरत किसी ब्लॉक की परिभाषा को तय करने के लिए होती है. जैसे, म्यूटेटर्स, एक्सटेंशन, मिक्सिन, फ़ील्ड वगैरह. आपके पास ऐसा फ़ंक्शन भी उपलब्ध कराने का विकल्प है जो आपके प्लग इन के सभी ब्लॉक को एक साथ इंस्टॉल करेगा.
    • खास हिस्सों को चुनने की सुविधा दें: आपको ब्लॉक की परिभाषा के सभी हिस्सों को अलग-अलग एक्सपोर्ट करना चाहिए, ताकि उपयोगकर्ता अपने जैसे कस्टम ब्लॉक बनाने के लिए, सिर्फ़ ज़रूरी हिस्सों को इंपोर्ट कर सके.
  • अपने प्लग इन में साइड इफ़ेक्ट का इस्तेमाल करने से बचें.
    • आपके प्लगिन को लोड करने के असर के तौर पर, ब्लॉक, फ़ील्ड, एक्सटेंशन, और अन्य चीज़ें इंस्टॉल नहीं होनी चाहिए. उपयोगकर्ताओं को यह कंट्रोल करना चाहिए कि कौनसी चीज़ें इंस्टॉल हों और कब इंस्टॉल हों. इससे उपयोगकर्ता, अपनी ज़रूरत के हिसाब से कॉम्पोनेंट इंपोर्ट कर सकते हैं. साथ ही, उन्हें इस बात की चिंता नहीं करनी पड़ती कि वे कॉम्पोनेंट इंस्टॉल नहीं होंगे जिनकी उन्हें ज़रूरत नहीं है.
  • नए फ़ील्ड को सीधे इंस्टैंशिएट करने के बजाय, JSON फ़ील्ड रजिस्ट्री का इस्तेमाल करें.

    • इसका सुझाव नहीं दिया जाता - सीधे नया फ़ील्ड इंस्टैंशिएट करना:

        const myCustomBlock = {
          init: function() {
            this.appendDummyInput()
                .appendField(new Blockly.FieldNumber(123), 'NAME');
          }
        }
      
    • सुझाई गई - JSON फ़ील्ड रजिस्ट्री:

        export const myCustomBlock = {
          init: function() {
            this.appendDummyInput()
                .appendField(Blockly.fieldRegistry.fromJson({
                    name: 'field_number',
                    value: 123,
                  }), 'NAME');
          }
        }
      
    • फ़ील्ड रजिस्ट्री का इस्तेमाल करने से, उपयोगकर्ता के लिए आपके ब्लॉक में इस्तेमाल किए गए फ़ील्ड को बदलना आसान हो जाता है. इसके लिए, उसे ब्लॉक की परिभाषा में बदलाव करने की ज़रूरत नहीं पड़ती.

  • इस बारे में अनुमान न लगाएं कि उपयोगकर्ता ने पहले क्या इंस्टॉल किया है.

    • अगर आपके प्लगिन को कस्टम फ़ील्ड या किसी दूसरे प्लगिन की ज़रूरत है, तो अपने दिए गए install फ़ंक्शन में उन फ़ील्ड को खुद रजिस्टर करें.
    • जल्द ही, Blockly की मदद से आपको बिना किसी गड़बड़ी के पहले से रजिस्टर किए गए आइटम रजिस्टर करने की सुविधा मिलेगी. तब तक, एक्सटेंशन, म्यूटेट करने वाले टूल, मिक्सिन या फ़ील्ड को खुद रजिस्टर करने से पहले, यह देखें कि क्या पहले से ही कोई रजिस्टर किया गया है.
    • अपने प्लग इन या ब्लॉक की परिभाषाओं के लिए ज़रूरी शर्तों या डिपेंडेंसी के बारे में साफ़ तौर पर बताएं.
  • अपने हर ब्लॉक के लिए जनरेटर फ़ंक्शन दें.

    • बेहतर तरीके से काम करने वाले जनरेटर फ़ंक्शन उपलब्ध कराने से, उपयोगकर्ता आपके ब्लॉक को आसानी से इस्तेमाल कर पाते हैं. उन्हें ब्लॉक के स्ट्रक्चर और डिज़ाइन को समझने की ज़रूरत नहीं पड़ती. अगर उन्हें अपना जनरेटर फ़ंक्शन लिखना पड़ता है, तो हो सकता है कि हर उपयोगकर्ता को दोहरा काम करना पड़े.
    • Blockly में JavaScript सबसे ज़्यादा इस्तेमाल की जाने वाली भाषा है. इसलिए, अगर आपको सिर्फ़ एक भाषा चुननी है, तो हमारा सुझाव है कि आप JavaScript चुनें. ऐसा तब तक करें, जब तक आपके ब्लॉक किसी खास भाषा के लिए न बनाए गए हों. जैसे, Python लाइब्रेरी लागू करना.
    • जिन भाषाओं के लिए जनरेटर फ़ंक्शन लागू नहीं किए जा सकते उनके लिए, 'मदद चाहिए' वाली समस्याएं पोस्ट करें. साथ ही, अगर कोई उपयोगकर्ता इनके लिए योगदान देता है, तो उनके लिए पुश रिक्वेस्ट स्वीकार करें.
    • अगर आपने अपने ब्लॉक के लिए इंस्टॉल फ़ंक्शन दिया है, तो आपके पास वैकल्पिक generators पैरामीटर को स्वीकार करने का विकल्प है. अगर कोई उपयोगकर्ता आपके साथ काम करने वाला जनरेटर इंस्टेंस पास करता है, तो ब्लॉक-कोड जनरेटर फ़ंक्शन अपने-आप इंस्टॉल हो सकता है. साथ ही, इससे जुड़े काम भी किए जा सकते हैं, जैसे कि रिज़र्व किए गए शब्द जोड़ना:

        // Your plugin's install function
        export const installMyCustomBlock(generators = {}) {
          Blockly.defineBlocks({my_custom_block: myCustomBlock});
          if (generators.javascript) {
            generators.javascript.forBlock['my_custom_block'] = myCustomGeneratorFunction;
            generators.javascript.addReservedWords('specialReservedWord');
          }
        }
      
        // How a user may install your block
        import {javascriptGenerator} from 'blockly/javascript';
        import {installMyCustomBlock} from 'blockly-cool-blocks-plugin';
        // installs the block definition and the javascript block-code generator
        installMyCustomBlock({javascript: javascriptGenerator});
      

सुझाव/राय दें या शिकायत करें

अगर आपको अपने प्लग इन में इन दिशा-निर्देशों का सबसे सही तरीके से पालन करने के बारे में कोई सवाल पूछना है, तो फ़ोरम में हमें बताएं! हमें आपकी ब्लॉक लाइब्रेरी देखने में खुशी होगी और उन पर सुझाव/राय/शिकायत देने में भी.

ध्यान दें कि फ़िलहाल, ब्लॉक की परिभाषाएं देने वाले सभी पहले पक्ष के प्लग इन इन दिशा-निर्देशों का पालन नहीं करते. हालांकि, नए प्लग इन इनका पालन करेंगे. साथ ही, हम मौजूदा प्लग इन को माइग्रेट करने की योजना बना रहे हैं.