# 插件

插件(plugin)是为 Blockly 增加功能的独立代码模块。例如,它可以添加自定义字段(field)、定义新主题(theme),或提供自定义渲染器(renderer)。插件通常通过 npm 打包与分发。

注意

BlocklyOptions 对象 (opens new window)里有 plugins 属性,可用于注入自定义 Blockly 行为的类。此类代码可以做成插件,但并非必须,两者没有强绑定关系。

若想快速了解插件,可先看官方视频:Plugins Overview talk (2021) (opens new window)

若你想创建自己的插件,请看:添加插件

# 第一方插件与第三方插件

第一方插件由 Blockly 团队维护,并以 npm 的 @blockly scope 发布,目标是适配广泛的 Blockly 应用场景。

第三方插件由社区或组织独立维护与发布,可能更复杂、更实验性,或更聚焦某个垂直场景。

# 查找插件

# 安装插件

建议优先用 npm 或 yarn 这类包管理器安装插件,便于接收更新。

  • 使用包管理器安装

# npm

npm install @blockly/field-angle

# yarn

yarn add @blockly/field-angle
  • 不使用包管理器安装

# unpkg

<script src="https://unpkg.com/@blockly/field-angle"></script>

你也可以直接克隆包含插件的 GitHub 仓库。第一方插件对应仓库是 blockly-samples (opens new window)

安装前请先看插件 README,确认是否有额外安装步骤。

# 使用插件

每个插件的使用方式都不完全相同,请以插件 README 为准。下面用 @blockly/field-angle (opens new window) 做示例:

  1. 从插件导入代码(方式取决于你的安装方式)。

# npm 或 yarn

import Blockly from 'blockly';
import {registerFieldAngle} from '@blockly/field-angle';

# unpkg

不需要 import 语句。

# 克隆仓库

import {registerFieldAngle} from 'path/to/plugin';
  1. 按需初始化插件。对于自定义字段类插件,通常要先注册字段:
registerFieldAngle();
  1. 在 block 定义里使用该插件功能:
Blockly.common.defineBlocksWithJsonArray([
  {
    type: 'my_angle_block',
    message0: '%1 degrees',
    args0: [
      {
        type: 'field_angle',
        name: 'FIELDNAME',
        value: 45,
      },
    ],
    output: null,
    style: 'math_blocks',
  },
]);
360 度表盘角度选择字段

# 插件版本

blockly-samples 中的插件采用 语义化版本(semver) (opens new window)。这意味着破坏性变更必须升级主版本号。对 core 做 monkey patch 的新插件通常会使用主版本 0,表示仍在初始开发阶段 (opens new window)

多数插件会将 blockly 声明为 peerDependency (opens new window),而不是 dependency。因为默认前提是你已经安装了 Blockly。这会让你自行管理 Blockly 版本,同时也要求你查看插件的 package.json,确认插件要求的最低 Blockly 版本。若插件升级后需要更高 Blockly 版本,这会被视为破坏性变更,并触发插件主版本升级。

当你在应用的 package.json 中添加插件时,默认通常会在版本前加 ^

"dependencies": {
  "@blockly/field-angle": "^5.0.12"
}

这表示 npm 可安装该主版本下更高的次版本和补丁版本,例如 5.0.205.1.0,但不会自动升级到新主版本(如 6.0.1)。当你升级 Blockly 主版本时,建议同时检查插件是否也有可升级的主版本。