提供方塊定義程式庫的外掛程式,是與 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});
意見回饋
如果您對於如何在外掛程式中遵守這些規範有任何疑問,歡迎前往論壇與我們聯絡!我們很樂意查看您的方塊程式庫,並提供相關意見回饋。
請注意,並非所有提供區塊定義的第一方外掛程式都遵循這些規範,但新外掛程式會遵循這些規範,我們也打算遷移現有外掛程式。