發布區塊程式庫

外掛程式提供區塊定義程式庫,是與 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 很快就會提供工具,讓你註冊已註冊的項目,不會發生錯誤。在那之前,建議您先檢查已註冊的項目,再自行註冊擴充功能、異動器、混合或欄位。
    • 清楚說明外掛程式或封鎖定義所需的任何必要條件或依附元件。
  • 建議您為每個提供的區塊提供產生器函式。

    • 提供可直接使用的產生器函式,讓使用者在不瞭解其結構和設計的情況下使用區塊時,會更加容易。如果使用者必須自行編寫產生器函式,可能會導致每位使用者執行多餘的工作。
    • JavaScript 是 Blockly 中最常用的語言,因此如果您只挑選一種語言,建議使用 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});
      

意見回饋:

如果您對如何在外掛程式中確實遵循這些規範有任何疑問,請前往論壇與我們聯絡!我們很樂意看見您的封鎖程式庫,並提供有關其意見回饋。

請注意,目前並非所有提供區塊定義的第一方外掛程式都遵循這些規範,但我們會打算遷移新的外掛程式。