news 2026/9/17 17:29:25

Gutenberg create-block-interactive-template 使用与演进:从 CHANGELOG 解读交互块模板的完整技术图谱

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Gutenberg create-block-interactive-template 使用与演进:从 CHANGELOG 解读交互块模板的完整技术图谱

Gutenberg create-block-interactive-template 使用与演进:从 CHANGELOG 解读交互块模板的完整技术图谱

【免费下载链接】gutenbergThe Block Editor project for WordPress and beyond. Plugin is available from the official repository.项目地址: https://gitcode.com/GitHub_Trending/gu/gutenberg

本指南以@wordpress/create-block-interactive-template的 CHANGELOG.md 为主线骨架,结合该包在 Gutenberg 仓库中的完整模板源码(index.js、block-templates/block-templates-client-side-navigation/下的.mustache模板),系统讲解如何基于官方交互块模板快速搭建基于 Interactivity API 的 WordPress 交互块,并深入剖析其版本演进背后隐含的架构变迁(从经典脚本到 ES Module、从手动 context 到wp_interactivity_data_wp_context、再到store()新 API 与viewModule)。读者读完后将掌握模板安装、三种 variant 的选择、模板生成结果的结构、关键源码位点,以及为何该模板是理解 Gutenberg 交互块最佳实践的最短路径。

一、CHANGELOG 里隐藏的技术演化史

与普通变更日志不同,create-block-interactive-template的 CHANGELOG.md 记录的不只是版本号,而是一条完整的交互块开发范式演进链。把关键条目按时间轴串联即可还原该模板从 1.2.0 到 2.55.0 的全部架构变化:

版本关键变化技术含义
1.2.0 (2023-08-10)example属性移入 block.json配合 create-block 对example的新支持,模板生成块的示例定义集中到块元数据
1.10.0 (2023-11-29)view.jsrender.php改用新的store()API交互逻辑从旧的data-wp-*直接挂载方式迁移到显式store()注册,是 Interactivity API 的正式形态
1.10.1 (2023-12-07)模板改用 modules 而非 scripts前端资源从经典脚本切换为 ES Module,为viewModule铺路
1.11.0 (2023-12-13)所有文件加入生成的插件 zip;Gutenberg 插件未安装时不再崩溃提升产物完整性与降级健壮性
1.12.0 (2024-01-10)模板改用viewModule字段block.json 的view声明从viewScript演进为模块化的viewModule
1.17.0 (2024-03-21)context 属性改用wp_interactivity_data_wp_context服务端渲染 context 数据不再手写 JSON,而是由 PHP 函数安全输出
2.0.0 (2024-05-31)最低 Node.js 版本提升到 v18.12.0(LTS)与工具链现代对齐,同步@wordpress/scripts的要求
2.7.0 (2024-09-05)最低 WordPress 版本提升到 6.6与最新@wordpress/scripts无缝协作
2.8.0 (2024-09-19)新增 TypeScript variant在默认模板之外提供强类型视图脚本,见下文“三种变体”
2.50.0 ~ 2.55.0 (2026-07~09)连续常规发布维持与 Gutenberg 主版本同步的版本节奏

这条演进链说明:该模板始终是 Interactivity API 官方最佳实践的“活教材”,每次 API 变更都会优先落进模板再推广到社区。

二、快速上手:安装命令与运行前提

该模板由npx @wordpress/create-block消费,使用方式极其简单(来自 README.md):

npx @wordpress/create-block --template @wordpress/create-block-interactive-template

运行前提(必须满足)

  • WordPress ≥ 6.5,或 Gutenberg ≥ 17.7:交互块依赖 Interactivity API 的运行时支持,低于此版本无法工作。
  • Node.js ≥ 18.12.0,npm ≥ 8.19.2:这一限制自 2.0.0 起生效(见 package.json 的engines字段),与@wordpress/scripts的构建链要求一致。

模板默认值一览

打开 index.js 的defaultValues可以看到生成块的完整默认骨架:

配置项默认值说明
slugexample-interactive生成块的目录/命名
titleExample Interactive编辑器中的块标题
descriptionAn interactive block with the Interactivity API.块描述
dashiconmedia-interactive编辑器图标
npmDependencies['@wordpress/interactivity']视图脚本依赖的运行时
supports.interactivitytrue显式声明块支持交互
viewScriptnull不再使用经典脚本方式
viewScriptModulefile:./view.js视图脚本以 ES Module 形式加载
renderfile:./render.php服务端渲染模板
example{}块预览示例
构建脚本wp-scripts build --experimental-modules --blocks-manifest支持模块化构建

其中--experimental-modules --blocks-manifest两个构建参数正是为了让viewModule的模块化产物被 WordPress 正确识别与加载,是 1.10.1/1.12.0 演进的结果。

三、三种变体(variant):按需选择脚手架

README 与index.jsvariants字段共同定义了三种可复用变体,通过--variant参数选择,不传该参数时默认使用default

1.default— 标准交互块脚手架

npx @wordpress/create-block --template @wordpress/create-block-interactive-template --variant default

生成一个演示响应式 state、context 与 DOM 事件处理的完整交互块。生成结果包含(来自 block-templates):

  • index.js— 通过registerBlockType注册块,并引入style.scsseditor.scss
  • edit.js— 编辑器内渲染{{title}} – hello from the editor!
  • render.php— 服务端渲染模板;
  • view.js— 前端交互逻辑;
  • block.jsonstyle.scsseditor.scssREADME.md

服务端渲染(render.php.mustache)展示了三个核心要点:

// 1. 注入全局状态 wp_interactivity_state( '{{namespace}}', array( 'isDark' => false, 'darkText' => esc_html__( 'Switch to Light', '{{textdomain}}' ), 'lightText' => esc_html__( 'Switch to Dark', '{{textdomain}}' ), 'themeText' => esc_html__( 'Switch to Dark', '{{textdomain}}' ), ) ); // 2. 使用 wp_interactivity_data_wp_context 输出 context(1.17.0 起) <?php echo wp_interactivity_data_wp_context( array( 'isOpen' => false ) ); ?> // 3. 通过>import { store, getContext } from '@wordpress/interactivity'; const { state } = store( '{{namespace}}', { state: { get themeText() { return state.isDark ? state.darkText : state.lightText; } }, actions: { toggleOpen() { const context = getContext(); context.isOpen = ! context.isOpen; }, toggleTheme() { state.isDark = ! state.isDark; } }, callbacks: { logIsOpen: () => { const { isOpen } = getContext(); console.log( `Is open: ${ isOpen }` ); }, }, } );

这里的state(响应式共享状态)、actions(事件处理器)、callbacks(副作用/watch 回调)正是 1.10.0 引入store()API 后的标准结构。

2.typescript— 强类型视图脚本

npx @wordpress/create-block --template @wordpress/create-block-interactive-template --variant typescript

default唯一区别是视图脚本为view.ts(view.ts.mustache),由index.jsviewScriptModule: 'file:./view.ts'指定。其亮点在于全类型化的 state 与 context

type ServerState = { state: { isDark: boolean; darkText: string; lightText: string; }; }; type Context = { isOpen: boolean; }; type Store = ServerState & typeof storeDef; const { state } = store< Store >( '{{namespace}}', storeDef );

注意ServerState & typeof storeDef的组合类型:它将PHP 端注入的初始 state 形状JS 端定义的状态派生逻辑合并为完整 Store 类型,getContext< Context >()让 context 读取也获得编译期检查。这是 2.8.0(2024-09-19)加入的类型安全增强。

3.client-side-navigation— 无刷新导航演示

npx @wordpress/create-block --template @wordpress/create-block-interactive-template --variant client-side-navigation

该变体演示由@wordpress/interactivity-router驱动的客户端导航,并额外将@wordpress/interactivity-router加入 npm 依赖(见 index.js 的 variants 配置)。生成内容来自独立的 block-templates-client-side-navigation 目录。

工作机制(模板 README.md.mustache 明确列出):

  • 服务端渲染内容render.php读取?quote=查询参数,从硬编码引语数组中挑选一条,渲染在 router region 内;
  • 客户端导航:Prev/Next 链接改变查询参数并经由@wordpress/interactivity-router触发导航,而非整页刷新;
  • 状态保持证明:router region 之外运行一个客户端秒表,跨导航持续跳动,证明没有发生整页重载;
  • 加载指示器:导航过程中显示 “Loading…” 提示。

其关键实现(render.php.mustache)中,导航 region 用data-wp-router-region="{{namespace}}/quote"划定,Prev/Next 链接用data-wp-on--click="actions.navigateTo"data-wp-on--mouseenter="actions.prefetchTo"绑定;对应的视图逻辑(view.js.mustache)则示范了 Generator 函数 +withSyncEvent+ 动态import()的异步导航模式:

navigateTo: withSyncEvent( function* ( event ) { event.preventDefault(); // getElement() 必须在任何 yield 之前同步调用 const { attributes } = getElement(); state.isNavigating = true; if ( state.artificialDelay ) { yield new Promise( ( resolve ) => setTimeout( resolve, 1000 ) ); } const { actions } = yield import( '@wordpress/interactivity-router' ); yield actions.navigate( attributes.href ); state.isNavigating = false; } ),

同时startTimercallback 通过data-wp-init在 DOM 初始化时启动 setInterval 秒表,其清理函数在组件卸载时清除定时器——这个“region 外状态跨导航存活”的秒表正是验证无整页刷新的可视证据。

四、模板生成的完整块结构与源码对照

综合以上分析,无论选择哪种 variant,生成块的目录结构都遵循 Gutenberg 标准块布局(以default为例):

src/$slug/ ├── block.json # 块元数据,含 viewModule / render / example ├── edit.js # 编辑器编辑界面 ├── editor.scss # 编辑器专属样式 ├── index.js # 块注册入口 ├── render.php # 服务端渲染模板(前端输出) ├── style.scss # 前台与编辑器共用样式 └── view.js # 前端交互模块(ES Module)

这些.mustache源模板由 create-block 在生成时替换{{slug}}{{title}}{{namespace}}{{textdomain}}等占位符。因此,本仓库中block-templates/block-templates-client-side-navigation/目录下的每一份.mustache文件,就是你在执行npx @wordpress/create-block后得到的最终文件,是学习与二次定制交互块最直接的源码参照。

五、版本选择与升级建议

  • 使用最新稳定版(2.55.0,2026-09-10):CHANGELOG 显示 2.50.0 ~ 2.55.0 期间为常规同步发布,持续跟随 Gutenberg 主版本;新项目应直接使用最新版以获得最新的 Interactivity API 特性。
  • 升级到 2.7.0+ 需注意:最低 WordPress 6.6 的限制意味着老站点需先升级 WordPress 再使用该模板。
  • 升级到 2.0.0+ 需注意:Node.js < 18.12.0 的开发环境需要先升级运行时,否则npm installwp-scripts构建会失败。
  • 从旧版模板迁移:若你手头的块还在用viewScript或旧式 context 写法,请参照 1.10.1、1.12.0、1.17.0 的演进点,分别迁移到viewModulestore()API 与wp_interactivity_data_wp_context

六、总结

@wordpress/create-block-interactive-template是通往 Gutenberg Interactivity API 的官方脚手架:default变体演示响应式 state/context/事件的核心范式,typescript变体叠加编译期类型安全,client-side-navigation变体展示 router 驱动的无刷新导航。而它的 CHANGELOG 本身,就是一份可读性极高的架构演进编年史——从脚本到模块、从viewScriptviewModule、从手工 context 到wp_interactivity_data_wp_context、从旧式绑定到store()API。若想进一步深挖 Interactivity API 的运行时实现,可继续阅读 packages/interactivity 与 packages/interactivity-router 的源码;若想了解 create-block 本体如何消费这些模板,参见 packages/create-block。通过对照模板源码与 CHANGELOG 逐版本阅读,你将能完整复现 Gutenberg 对“交互块应该如何编写”这一问题的官方答案。

【免费下载链接】gutenbergThe Block Editor project for WordPress and beyond. Plugin is available from the official repository.项目地址: https://gitcode.com/GitHub_Trending/gu/gutenberg

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 17:28:03

6G显存跑AI视频:ComfyUI整合包低显存优化与全平台显卡适配

1. 一份整合包到底替你省掉了哪几件事很多人第一次接触 ComfyUI&#xff0c;卡住的地方从来不是"不会用节点"&#xff0c;而是根本走不到打开界面那一步。Python 版本对不上、torch 装成 CPU 版、xformers 编译失败、某个自定义节点要求 numpy 降级、依赖冲突把整个环…

作者头像 李华
网站建设 2026/9/17 17:27:42

600MW火电厂电气设计:从主接线选型到设备校验

简介&#xff1a;针对电气工程及其自动化专业学生的600MW火电厂电气部分课程设计完整方案&#xff0c;可用于毕业设计或同类课程设计参考。包体内为1个docx文档&#xff0c;压缩后约200KB&#xff0c;内容覆盖发电厂电气主接线设计、主变压器选型与校验、短路电流计算、厂用负荷…

作者头像 李华
网站建设 2026/9/17 17:26:41

GitOps部署模式:从Jenkins到Argo CD的演进与实践

1. 部署范式的历史演变在软件交付领域&#xff0c;部署方式的演进始终围绕着两个核心诉求&#xff1a;可靠性和效率。十年前&#xff0c;我们还在使用手工部署脚本&#xff0c;后来Jenkins等CI工具的出现让自动化部署成为可能。但今天&#xff0c;当我们的系统规模扩展到数百个…

作者头像 李华
网站建设 2026/9/17 17:23:36

840D SL五轴调试核心:几何参数链闭环验证与标定

简介&#xff1a;本资源是西门子SINUMERIK 840D SL数控系统官方五轴应用调试手册&#xff0c;面向数控机床调试工程师、自动化集成技术人员及高职院校机电类专业教师与学生&#xff0c;聚焦解决五轴联动加工中坐标系设定、转换结构配置、几何参数标定等核心调试难题。手册内容覆…

作者头像 李华
网站建设 2026/9/17 17:20:58

跨机型寿命预测:迁移学习与DeepSeek生成维护计划的落地实践

简介&#xff1a;面向工业车间设备管理及算法工程人员&#xff0c;围绕跨机型设备寿命预测与维护计划智能生成场景&#xff0c;系统梳理了基于迁移学习的完整技术方案。这是一份462页的PDF文档&#xff0c;共59个大章节&#xff0c;支持目录跳转与阅读器书签大纲&#xff0c;整…

作者头像 李华