外掛程式

簡介

外掛程式是獨立的程式碼片段,可為 Blockly 新增功能。外掛程式可以新增欄位、定義主題、建立轉譯器等。

外掛程式的目標使用者是指透過 npm 尋找並使用外掛程式的開發人員。如要進一步瞭解如何建構外掛程式,您也可以觀看「2021 年如何建構外掛程式講座」影片,以及觀看 2021 年外掛程式總覽講座

第一方或第三方

blockly-samples 存放區中定義的外掛程式為第一方外掛程式,表示 Blockly 團隊提供支援,並在 npm 的 @blockly 範圍下發布這些外掛程式。

優質的第一方外掛程式:

  • 有顯而易見的用途
  • 適合一般用途
  • 保持穩定
  • 易於使用

第三方外掛程式由獨立維護及發布。第三方外掛程式可能較為複雜、更具實驗性質,或更針對目標。

舉例來說,許多機器人專案都可以使用用來設定馬達速度的欄位。另一方面,用於編輯資料庫結構定義定義的特定物件的欄位,優於第三方外掛程式。

第一方條件

第一方外掛程式必須符合下列規定:

  • 除非 Blockly 團隊的豁免許可,否則適用於所有主要平台。
    • Chrome、Firefox、Safari、Edge
  • 擁有一位作家願意在第一年處理錯誤。
  • 不會擋住猴子。
  • 擁有明確定義及記錄的 API。
  • 除非 Blockly 團隊的豁免授予,否則不得從 Blockly Core 呼叫私人或套件函式。
    • 允許覆寫您定義的子類別中的套件函式。
    • 如要享有豁免資格,歡迎針對區塊樣本提出問題。
  • 有測試。

正在尋找外掛程式

  • 在 GitHub 頁面探索第一方外掛程式的即時示範
  • npm 中搜尋 @blockly,即可查看 Blockly 團隊發布的外掛程式清單。
  • 在 GitHub 上查看區塊範例存放區中的外掛程式目錄。每個外掛程式都有一個 README 檔案,用來說明其行為和預期用途。

安裝外掛程式

  1. 使用上述其中一項資源尋找您想要安裝的外掛程式,並找出 README 檔案。
  2. 依照 README 的安裝指示操作。一般來說,您需要從 npm 安裝外掛程式 (例如

    npm install @blockly/block-plus-minus --save
    

    然後匯入到程式碼中 (例如

    import Blockly from 'blockly';
    import '@blockly/block-plus-minus';
    
  3. 有些外掛程式可能需要執行額外步驟,例如初始化或註冊外掛程式。這些步驟會列在 README 中。

外掛程式版本

區塊範例中的外掛程式遵循語意化版本管理,因此任何破壞性變更都會納入新的主要版本。如 semver 規格所述,任何依賴 Monkey 修補核心的新外掛程式都會有 0 的主要版本以代表初始開發。

大多數外掛程式都包含主要 blockly 套件做為 peerDependency,而非依附元件。這是因為我們希望您自行在應用程式中安裝 Blockly (如果沒有一併使用 Blockly),您就可以自行管理 Blockly 的版本,這是很合理的情況。 不過,許多外掛程式都是開發為使用最新版 Blockly 中的新 API,因此您需要瞭解版本需求。外掛程式的 package.json 會指出與該外掛程式相容的最低版本。如果外掛程式在更新後需要使用新版 Blockly 版本 (例如使用全新的 API),由於我們認定這是一項破壞性變更,因此外掛程式的主要版本將會增加。

將外掛程式新增至 package.json 時,系統會預設在版本之前加上插入點,例如

"@blockly/block-plus-minus": "^2.0.15"

此設定會讓 npm 安裝列出版本或以上版本的任何次要版本,因此 2.0.202.1.0 版本可以正常運作,但無法存取 3.0.1 等新的主要版本。更新至新版本的 Blockly 時,建議您檢查是否有任何外掛程式也能更新至新的主要版本。

安裝沒有 npm 的外掛程式

雖然我們一般建議使用 npm 來輕鬆接收更新,但您也可以在沒有 npm 的情況下使用外掛程式。

您可以使用 unpkg 加入外掛程式檔案,而不必複製檔案,例如

<script src="https://unpkg.com/@blockly/block-plus-minus"></script>

或者,您可以複製 blockly-samples 存放區,並將檔案加入本機,類似於您複製 Blockly 的方式。不過,建議您盡可能使用套件管理員,因為這樣有助於您隨時掌握外掛程式的最新功能和錯誤修正。

使用這個方法時,您仍需執行外掛程式 README 中列出的任何初始化或註冊步驟。