添加插件

本文档讨论了如何创建新插件。虽然该流程是针对创建第一方插件的,但您也可以将其作为创建第三方插件的指南。

如需大致了解插件,请参阅插件

如需快速了解如何创建插件,请观看我们的如何构建插件讲座(2021 年)

第一方与第三方

插件的目标用户是通过 npm 查找和使用插件的开发者。

第一方插件由 Blockly 团队提供支持,并在 npm 上以 @blockly 范围发布。它们旨在用于各种 Blockly 应用,并且稳定易用。它们存储在 blockly-samples 中。用于设置电机速度的字段可用于许多机器人项目,是第一方插件的理想候选对象。

第三方插件由第三方独立维护和发布。它们可能更复杂、更具实验性,或者面向的 Blockly 应用范围更窄。用于编辑数据库架构定义的特定对象的字段最好作为第三方插件。

第一方条件

第一方插件必须满足以下要求:

  • 适用于所有主要平台,除非获得 Blockly 团队的豁免。
    • Chrome、Firefox、Safari、Edge
  • 有愿意在第一年处理 bug 的作者。
  • 不 monkeypatch Blockly。
  • 具有明确定义且记录在案的 API。
  • 除非获得 Blockly 团队的豁免,否则请勿从 Blockly 核心调用私有函数或软件包函数。
    • 允许在您定义的子类上替换软件包函数。
    • 如果您想申请豁免,请在 blockly-samples 中提出问题。
  • 可附测试。

授权流程

插件会经历四个阶段:建议讨论实现发布

建议

插件最初是建议。您可以创建使用功能请求模板的新问题来建议插件。如需了解详情,请参阅如何撰写功能请求

除了基本的功能请求信息之外,插件建议还应包含:

  • 插件将公开的 API。
  • 需要在核心 Blockly 中添加或更改的 API,以支持插件。
  • 如果插件包含界面功能,请提供屏幕截图、GIF 或模拟图。
  • 说明为什么它应该是第一方插件,而不是第三方插件。

Blockly 团队会审核收到的建议,然后关闭问题或同意该建议可作为优秀的第一方插件。

讨论

接下来,插件进入讨论阶段。此阶段包括:

  • 对所需功能的澄清说明。
  • 插件 API 的澄清说明。
  • 规划实施。
  • 规划测试。
  • 讨论核心 Blockly 中的 API 更改。
  • 将大型插件分解为实现步骤。
  • 基于我们的命名惯例的插件命名。
  • 确认满足所有第一方条件

此讨论通常在 GitHub 问题中进行。插件的范围越小,讨论阶段就越快。较大的插件可能会引起社区的关注,并引发关于“正确解决方案”的激烈讨论。如果您的 issue 出现这种情况,恭喜您!您找到了人们关心的话题。

目标是在讨论阶段结束时,做出所有主要设计决策,并制定清晰的实现步骤列表。这两者都应在问题的注释中记录。

在讨论过程中,我们可能会决定某个插件应为第三方插件,而不应在 @blockly 范围内发布。在这种情况下,我们会说明原因并关闭问题。

讨论结束后,Blockly 团队成员会注明该功能已准备好实现。

实现

实施步骤包括:

  • 运行 npx @blockly/create-package 以从模板设置插件及其目录。了解详情…
  • 实现插件的核心逻辑。
  • 根据需要实现界面。
  • 使用 Mocha 测试插件。
  • 记录插件,包括 README

如果建议的插件已获批准实施,并且您想参与开发,请在相应问题中添加评论,询问该问题是否仍可接受贡献。

实现可以由多位贡献者并行完成。您可以自行在自己的分支中协作实现插件,也可以通过针对此代码库的拉取请求来实现。如果您想在此代码库中协作开发插件,请让 Blockly 团队为您创建一个功能分支。

应将插件添加到 blockly-samples 的 master 分支中的 gh-pages/index.md 文件。这样一来,这些插件就会显示在我们的插件网站上。第一方插件应指向其测试页面。您还可以向此页面添加第三方插件,并指向其所有者选择的链接,例如托管演示或 npm 页面。

发布

最后,发布。Blockly 团队使用 Lerna 来管理所有插件的版本控制和发布。

每周四,系统会发布自上次发布以来发生过更改的所有插件。如果您需要尽快发布更改,请在拉取请求中注明。

每当发布插件时,插件网站也会更新。

尚未准备好发布的插件应在其 package.json 中标记为 private。如果插件依赖于核心 Blockly 中尚未发布的更改,可能会发生这种情况。核心 Blockly 在每个季度的最后一周发布(每三个月一次)。