新增外掛程式

本文將說明如何建立新外掛程式。雖然該程序是說明如何建立第一方外掛程式,但您也可以將其做為建立第三方外掛程式的指南。

如要瞭解外掛程式總覽,請參閱「外掛程式」。

如要快速瞭解如何建立外掛程式,請參閱我們的外掛程式建構方式講座 (2021 年)

第一方與第三方

外掛程式的目標使用者是透過 npm 尋找及使用外掛程式的開發人員。

Blockly 團隊支援第一方外掛程式,並在 npm 的 @blockly 範圍內發布。這些積木可用於各種 Blockly 應用程式,而且穩定易用。這些檔案會儲存在 blockly-samples 中。許多機器人專案都會使用馬達速度設定欄位,因此很適合做為第一方外掛程式。

第三方外掛程式會獨立維護及發布。這些函式庫可能更複雜、更具實驗性質,或適用於範圍較窄的 Blockly 應用程式。編輯資料庫結構定義所定義特定物件的欄位,最好是使用第三方外掛程式。

第一方條件

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

  • 適用於所有主要平台,除非 Blockly 團隊授予豁免權。
    • Chrome、Firefox、Safari、Edge
  • 有作者願意在第一年處理錯誤。
  • 請勿對 Blockly 進行猴子修補。
  • 有明確定義並記錄在案的 API。
  • 除非 Blockly 團隊授予豁免權,否則請勿從 Blockly 核心呼叫私有或套件函式。
    • 您可以在定義的子類別中覆寫套件函式。
    • 如要申請豁免,請在 blockly-samples 的問題中提出要求。
  • 提供測驗。

授權程序

外掛程式會經歷四個階段:建議討論實作發布

建議

外掛程式會以建議的形式顯示,如要建議外掛程式,請使用「Feature Request」(功能要求) 範本建立新問題。詳情請參閱如何撰寫功能要求

除了基本功能要求資訊外,外掛程式建議還應包含:

  • 外掛程式會公開的 API。
  • 需要在核心 Blockly 中新增或變更的 API,才能支援外掛程式。
  • 如果外掛程式包含 UI 功能,請附上螢幕截圖、GIF 或模擬圖。
  • 說明為何應使用第一方外掛程式,而非第三方外掛程式。

Blockly 團隊會審查收到的建議,然後關閉問題,或同意建議是合適的第一方外掛程式。

討論

接著,外掛程式會進入討論階段。這個階段包括:

  • 說明所需功能。
  • 釐清外掛程式的 API。
  • 規劃實作作業。
  • 規劃測試。
  • 討論核心 Blockly 中的 API 變更。
  • 將大型外掛程式細分為導入步驟。
  • 外掛程式命名,須遵循命名慣例
  • 確認符合所有第一方條件

這類討論通常會在 GitHub 問題中進行。外掛程式的範圍越小,討論階段就越快。較大的外掛程式可能會吸引社群的注意,並對正確解決方案提出強烈的意見。如果問題已解決,恭喜!你發現了大家關心的事物。

目標是在討論階段結束時,做出所有重大設計決策,並列出明確的實作步驟。兩者都應記錄在問題的註解中。

討論期間,我們可能會決定外掛程式應為第三方外掛程式, 而非發布在 @blockly 範圍內。在這種情況下,我們會說明原因並結案。

討論完成後,Blockly 團隊成員會註記該提案已準備好實作。

導入作業

導入步驟包括:

  • 執行 npx @blockly/create-package,從範本設定外掛程式及其目錄。瞭解詳情...
  • 實作外掛程式的核心邏輯。
  • 視需要實作 UI。
  • 使用 Mocha 測試外掛程式。
  • 記錄外掛程式,包括 README

如果建議的外掛程式已獲准實作,且您想著手開發,請在問題中留言,詢問是否仍開放貢獻。

多位協作者可以並行實作。您可以在自己的分支中共同實作外掛程式,或透過對這個存放區的提取要求實作。如要在這個存放區中協作外掛程式,請要求 Blockly 團隊為您建立功能分支。

外掛程式應新增至 blockly-samples 的 master 分支中的 gh-pages/index.md 檔案。這樣一來,這些外掛程式就會顯示在我們的外掛程式網站上。第一方外掛程式應指向測試頁面。您也可以在這個頁面新增第三方外掛程式,並指向擁有者選擇的連結,例如代管的試用版或 npm 頁面。

發布中

最後是發布。Blockly 團隊使用 Lerna 管理所有外掛程式的版本和發布作業。

每週四,系統會發布自上次發布以來有變更的任何外掛程式。如需盡快發布變更,請在提取要求中註明。

外掛程式發布後,外掛程式網站也會更新。

如果外掛程式尚未準備好發布,應在 package.json 中標示 private。如果外掛程式依附於核心 Blockly 中尚未發布的變更,就可能發生這種情況。核心 Blockly 會在每季的最後一週發布 (每三個月一次)。