Blockly 实战速览10 分钟跑通可视化编辑器搞定积木自定义与代码生成【免费下载链接】blocklyThe web-based visual programming editor.项目地址: https://gitcode.com/gh_mirrors/bloc/blockly让最终用户在浏览器里拖拽积木拼出程序不用碰一行语法——这是 Blockly 要解决的问题。作为 Google 开源的可视化编程编辑器库它用互相咬合的图形积木表示变量、逻辑判断、循环这些代码概念并把拼好的积木导出成 JavaScript、Python、PHP、Lua、Dart 五种语言之一。下面围绕装好一个能用的编辑器这个目标把关键步骤走一遍。3 条命令让 Blockly 编辑器出现在浏览器里环境要求不高现代浏览器加 Node.js 18 以上package.json 中 engines 声明为18。npm install blockly编辑器本体只需一个空容器和一次inject调用import * as Blockly from blockly; const workspace Blockly.inject(blocklyDiv, { toolbox: [ { kind: category, name: Logic, contents: [{ kind: block, type: controls_if }] }, ], });toolbox支持 JSON 数组或 XML 两种描述方式。注入后 Blockly 会把 SVG 画布、侧边工具栏、缩放控件全部挂进#blocklyDiv返回值workspace是后续一切操作的入口。注入逻辑的完整实现可以看 core/inject.ts所有可传配置项的说明在 core/blockly_options.ts。工具栏、主题、事件监听编辑器三件套想让编辑器像产品而不是像 demo通常要补三处配置。工具栏分两类。积木少时用一个平铺 flyoutkind: flyout积木多时用带分类的 toolboxkind: category用户点分类再展开积木仓库自带的 tests/playground.html 里就放了三种工具栏样例可直接抄。主题控制配色。内置主题在 core/theme/比如Blockly.Themes.Classic。想换一套颜色声明自己的主题并指定积木样式即可const myTheme Blockly.Theme.defineTheme(myTheme, { blockStyles: { logic_blocks: { colourPrimary: #4a6785 }, }, });事件监听用于业务联动。自动保存、实时校验这类需求都走同一个入口workspace.addChangeListener((e) { if (e.type Blockly.Events.BLOCK_CHANGE) { // 积木被修改触发自动保存 } });事件体系的所有类型定义在 core/events/ 目录按积木增删、移动、字段变化等拆分得很细。自定义积木块两种定义方式自定义积木是 Blockly 使用频率最高的能力有两种写法。方式一JSON 声明推荐。积木外观用 JSON 描述defineBlocksWithJsonArray一次性注册Blockly.defineBlocksWithJsonArray([ { type: say_hello, message0: 说 %1, args0: [{ type: field_input, name: TEXT, text: World }], previousStatement: null, nextStatement: null, colour: 160, tooltip: 打印一句话, }, ]);message0里的%1是占位符按顺序对应args0的字段previousStatement/nextStatement声明积木可以上下拼接。仓库里上千行积木定义基本都是这种写法blocks/logic.ts 的controls_if是很好的参照——它还演示了mutator可折叠分支和extensions机制。方式二用 Block 类在代码里搭。需要运行时动态决定字段时才用new Blockly.Block(...)加appendField/appendInput手工构建。JSON 方式覆盖不了的需求再用它。定义完别忘了把type加进 toolbox否则积木只注册不显示。从积木到可执行代码代码生成 4 行搞定自定义积木能拖了最后一步是让拼出来的东西真的能跑。仓库 generators/ 目录内置五个生成器以 JavaScript 为例import {javascriptGenerator} from blockly/javascript; javascriptGenerator.forBlock[say_hello] function (block, generator) { const text generator.quote_(block.getFieldValue(TEXT)); return console.log(${text});\n; }; const code javascriptGenerator.workspaceToCode(workspace);逻辑很简单生成器按积木树递归遍历每个type对应forBlock里的一个函数函数返回该积木对应的代码片段生成器负责处理缩进、变量声明和运算符优先级优先级规则见 javascript_generator.ts 中的Order定义。内置积木都有现成生成函数你只需要为自己的积木补上缺失的那一个。保存与还原工作区JSON 状态与 XML积木程序要跨会话保存有两种序列化格式// JSONv11 推荐的持久化格式 const state Blockly.serialization.workspaces.save(workspace); Blockly.serialization.workspaces.load(state, workspace); // XML旧格式兼容存量数据 const xml Blockly.Xml.workspaceToDom(workspace);JSON 格式同时保存积木、变量和工作区注释还原用Blockly.serialization.workspaces.loadXML 走Blockly.Xml系列函数。两套格式的读写逻辑分别在 core/serialization/ 和 core/xml.ts。tests/playground.html 里的 Save JSON / Save XML / Load 按钮就是这两个 API 的最小封装可以直接参考它的事件绑定方式。三个高频坑积木不显示。九成是 toolbox 里没有引用该type另一成是忘了加载积木包。npm 包按子路径拆分标准积木库不在blockly主入口里需要import blockly/blocks或按需import blockly/blocks/logic这类引入。旧教程的 API 失效。大量文章还在用Blockly.JavaScript.workspaceToCodev11 起生成器已从主包移到子路径blockly/javascript、blockly/python等见 package.json 的exports字段。主入口只保留核心 API。代码生成报 No generator for block。自定义积木忘了注册forBlock函数时生成器会直接抛错而不是静默跳过。控制台看到这条报错就去补对应语言的生成函数。下一步做什么去哪找源码想动手验证最快的路径是把源码拉下来跑官方 playgroundgit clone https://gitcode.com/gh_mirrors/bloc/blockly cd blockly npm install npm startnpm start会构建后打开 tests/playground.html一个自带工具栏切换、代码导出、事件日志的完整实验台。常用入口导航标准积木定义blocks/logic / math / loops / procedures 等分类清晰五种语言生成器generators/可运行示例demos/代码演示、云存储、移动端 WebView完整 API 类型声明typings/事件系统core/events/建议的练习顺序先在 playground 里用内置积木拼一个小程序并导出五段代码对比同一逻辑在不同语言的产物然后定义一个自己的积木JSON 方式 JS 生成函数最后给它接上addChangeListener做自动保存。这三件事做完就具备了做一套可视化编程产品的基本盘。【免费下载链接】blocklyThe web-based visual programming editor.项目地址: https://gitcode.com/gh_mirrors/bloc/blockly创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
本地歌曲的带时间轴歌词怎么批量补齐?163MusicLyrics 快速上手指南 本地歌曲的带时间轴歌词怎么批量补齐?163MusicLyrics 快速上手指南 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics
整理本地音乐库时,一半的歌缺歌… · 2026/11/4 6:16:23
shadPS4 PS4 模拟器新手指南:从 clone 到跑通 Bloodborne shadPS4 PS4 模拟器新手指南:从 clone 到跑通 Bloodborne 【免费下载链接】shadPS4 PlayStation 4 emulator for Windows, Linux, macOS and FreeBSD written in C 项目地址: https://gitcode.com/GitHub_Trending/sh/shadPS4
在 Linux 终端敲进几行命令&… · 2026/11/4 6:16:23
Folia:把歌词唱满全屏的免费歌词播放器指南 Folia:把歌词唱满全屏的免费歌词播放器指南 【免费下载链接】folia-major 专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major
如果你只想要一行歌词安安静静挂在角落… · 2026/11/4 6:15:23
Hermes Agent架构解密:可扩展AI代理系统的设计模式与实现原理 Hermes Agent架构解密:可扩展AI代理系统的设计模式与实现原理
Hermes Agent是一款面向开发者和架构师设计的可扩展AI代理框架,它通过模块化架构实现了多平台集成、工具调用管理和上下文压缩等核心功能。该项目采用Python技术栈,支持OpenAI工… · 2026/11/4 19:24:44
Hermes Agent与自动驾驶仿真平台集成:CARLA与LGSVL Simulator完整指南 Hermes Agent与自动驾驶仿真平台集成:CARLA与LGSVL Simulator完整指南
Hermes Agent是一款功能强大的开源AI代理工具,能够自主执行各类任务并不断学习成长。本文将详细介绍如何将Hermes Agent与主流自动驾驶仿真平台CARLA和LGSVL Simulator进行集成&… · 2026/11/4 19:19:41
Hermes Agent与区块链智能合约测试框架:Truffle与Hardhat全解析 Hermes Agent与区块链智能合约测试框架:Truffle与Hardhat全解析
在区块链开发领域,智能合约的安全性与可靠性至关重要。Hermes Agent作为一款强大的AI驱动开发工具,能够与主流智能合约测试框架无缝集成,显著提升开发效率与代码质… · 2026/11/4 19:19:41
优化Hermes Agent的网络连接:TCP优化与连接复用实用指南 优化Hermes Agent的网络连接:TCP优化与连接复用实用指南
Hermes Agent作为一款强大的AI代理工具,其网络通信效率直接影响整体性能。本文将详细介绍如何通过TCP优化和连接复用技术提升Hermes Agent的网络连接稳定性与响应速度,帮助用户获得更… · 2026/11/4 19:19:41
Hermes Agent性能监控告警集成:Slack、Email与PagerDuty全攻略 Hermes Agent性能监控告警集成:Slack、Email与PagerDuty全攻略
Hermes Agent 是一款功能强大的开源智能代理框架,支持多平台集成与自动化任务处理。本文将详细介绍如何为 Hermes Agent 配置性能监控告警系统,实现 Slack 实时通知、Email 详细… · 2026/11/4 19:19:41
优化Hermes Agent的存储性能:RAID级别与存储协议选择 优化Hermes Agent的存储性能:RAID级别与存储协议选择
在处理大规模数据和高并发任务时,Hermes Agent的存储性能直接影响整体运行效率。本文将详细介绍如何通过选择合适的RAID级别和存储协议,显著提升Hermes Agent的存储吞吐量、数据可靠性和响… · 2026/11/4 19:19:41
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38