HeadlinesBriefing favicon HeadlinesBriefing.com

htmx 4.0 发布:主要变更与迁移指南

Hacker News •
×

htmx 团队经过 8 个月的工作,发布了 4.0.0 版本。该版本的灵感源于创建 fixi,这加深了对 fetch() API 和异步编程的理解。此前,由于向后兼容性问题,JavaScript 一直依赖 XMLHttpRequest。一次与 Christian 的偶然接触激发了对流式 HTML 的兴趣,促使内部转向使用 fetch()。在 Michael 和 Alex 的帮助下,团队移植了 fixi 和 htmx 测试套件,重新发现了 htmx 许多设计决策的原因,并使新实现与旧实现紧密对齐。

2.x 和 4.x 之间的行为差异相对较小,但做出了一些深思熟虑的选择以支持百年 Web 服务。值得注意的是,4.0 未在 NPM 上标记为 latest,以避免强制依赖非版本化 CDN 的用户升级。相反,2.x 仍保持 latest,而 4.0 将作为 next 直到 2027 年初。网站将引用 4.0。

三大主要变更如下:首先,属性继承现在需要显式声明:在 htmx 2 中,像 hx-confirm 这样的属性默认由子元素继承;在 4.0 中,必须添加 :inherited 后缀(例如 hx-confirm:inherited)。这是最大的迁移负担,但命令行工具可以帮助识别需要修改的地方,并且不再需要 hx-disinherit。其次,事件名称已标准化为 htmx:phase:action[:sub-action] 格式(例如 htmx:before:request 替代 htmx:beforeRequest)。第三,历史记录支持不再默认使用 localStorage,这对大多数用户来说是无感的。内部实现上,从 XMLHttpRequest 迁移到 fetch() 对用户是透明的。

其他变更包括:大多数错误事件合并为 htmx:error,HTTP 错误触发 htmx:response:error,htmx:xhr:* 事件被移除,htmx:validation:* 事件被原生浏览器验证取代。升级检查器会标记 hx-on 属性和 JavaScript 中的旧事件名称。总体而言,htmx 4.0 在保持兼容性的同时,现代化了内部实现并澄清了行为。

关键实体:公司:htmx、fixi | 人物:Christian、Michael、Alex

常见问题:htmx 4.0 中最大的变化是什么?

最大的变化是属性继承现在需要显式声明。在 htmx 2 中,像 hx-confirm 这样的属性默认由子元素继承;在 4.0 中,必须添加 :inherited 后缀(例如 hx-confirm:inherited)才能启用继承。命令行工具可以帮助找到需要修改的地方。