本文档讨论了如何创建新插件。虽然该流程是针对创建第一方插件的,但您也可以将其作为创建第三方插件的指南。
如需大致了解插件,请参阅插件。
如需快速了解如何创建插件,请观看我们的如何构建插件讲座(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 在每个季度的最后一周发布(每三个月一次)。