htmx 2.0.0-beta1 发布解读:从 1.x 迁移的关键变更、新特性与源码印证
前端【免费下载链接】htmxhtmx - high power tools for HTML项目地址https://gitcode.com/GitHub_Trending/ht/htmx点击查看免费下载导读htmx 于 2024 年 3 月 15 日发布了 2.0.0 的首个 beta 版本2.0.0-beta1这是 htmx 迈向 2.x 时代的重要里程碑。本文基于官方发布说明结合本仓库htmx 官方源码仓库的src/htmx.js实现、迁移指南与扩展文档为你系统梳理该版本的核心变更——包括hx-sse/hx-ws属性的移除、DELETE请求负载方式的变化、扩展机制与核心代码库的分离以及新增的textContent交换方式、嵌套 OOB 交换配置项等。读完本文你将掌握 1.x 到 2.x 迁移的完整要点并理解这些变更在源码层面的落地方式可直接用于评估与执行你项目中的升级工作。重要提示2.0.0-beta1属于beta 预发布版本官方明确不建议用于生产环境发布它的目的是开启针对真实场景的最终测试。如果你有余力官方建议切换到该版本对你现有 htmx 功能做一次快速回归并反馈问题。一、版本定位与发布背景htmx 2.0.0-beta1 是 2.x 系列的第一个 beta 版本。官方在发布说明中强调该版本不应视为生产就绪仅为真实场景的最终测试而发布官方特别希望社区帮助验证两类高风险变更见下文第二节完整升级路径请参考 htmx 1.x → 2.x 迁移指南从 2.x 起不再兼容 IE但 1.x 系列会继续为 IE 用户提供支持。这一定位意味着如果你在生产环境使用 htmx当前阶段仍应以 1.x 稳定版为主若要进行 2.x 预研则应在测试/预发环境执行迁移验证。二、本次发布的两大重点变更发布说明明确列出了社区最需要关注的两处行为变化这也是 2.0 语义化主版本号升级的核心理由。2.1 移除废弃的hx-sse与hx-ws属性1.x 中内置于核心代码库的hx-sse、hx-ws两个属性以及配套的hx-extsse/hx-extws用法已被移除统一改为**扩展extension**方式提供。扩展版本在 1.x 中已经可用因此这是一条提前告知、向后兼容的迁移路径。迁移动作非常直接把hx-sse/hx-ws属性写法替换为扩展写法例如!-- 1.x 旧写法 -- div hx-sseconnect:/events/div div hx-wsconnect:/socket/div !-- 2.x 新写法显式引入扩展属性改为事件级配置 -- div hx-extsse sse-connect/events hx-triggersse:message/div div hx-extws ws-connect/socket/div其中 SSE 扩展存在一处破坏性变更见第四节升级时必须使用新版 SSE 扩展文件。2.2DELETE请求改用参数而非表单编码体1.x 中DELETE请求的负载通过表单编码form-encoded的请求体body发送而按照 HTTP 规范DELETE应与GET一样使用 URL 参数request parameters。2.0 遵循了规范DELETE请求的参数将编码进 URL。在 src/htmx.js 中可以看到这一默认值的源码定义/** * htmx will format requests with these methods by encoding their parameters in the URL, not the request body * type {(HttpVerb)[]} * default [get, delete] */ methodsThatUseUrlParams: [get, delete],对应的请求构造逻辑位于 src/htmx.jslet useUrlParams htmx.config.methodsThatUseUrlParams.indexOf(verb) 0也就是说凡是在methodsThatUseUrlParams列表中的 HTTP 动词其参数都会走 URL 而非请求体。如果后端接口仍按 1.x 行为解析DELETE请求体迁移后需要同步调整服务端若希望保留旧行为可改回htmx.config.methodsThatUseUrlParams [get]详见第五节。三、安装方式2.0.0-beta1可以通过包管理器以版本号2.0.0-beta1安装也可以直接通过 CDN 引用script srchttps://unpkg.com/htmx.org2.0.0-beta1/dist/htmx.min.js/script也可以直接下载https://unpkg.com/htmx.org2.0.0-beta1/dist/htmx.min.js到本地引入。四、扩展生态的重组2.0 的一个结构性变化是所有扩展已从 htmx 核心代码库中移除迁移到独立的扩展仓库htmx-extensions并通过 https://extensions.htmx.org 站点分发。这意味着 htmx 核心变得更精简扩展的生命周期、版本发布与核心解耦。对使用者的影响原来依赖核心包内置扩展如 class-tools、preload、sse、ws、response-targets、idiomorph 等的页面2.x 需要显式引入对应扩展文件大部分 1.x 扩展可以继续在 htmx 2 上工作但SSE 扩展有破坏性变更必须升级到新版 sse.js官方提供了htmx 1.x 兼容扩展htmx-1-compat用于在 2.x 中恢复部分 1.x 行为其说明见 htmx-1-compat 扩展文档。本仓库中与之对应的文档还包括 SSE 扩展、WebSocket 扩展 与 扩展开发指南可作为迁移与二次开发的参考。五、迁移要点全解基于官方迁移指南迁移指南htmx 1.x → 2.x Migration Guide强调 htmx 一贯重视向后兼容多数场景几乎无需改动。以下逐条说明关键差异与默认值变化。5.1 模块化产物新增 AMD / CJS / ESM 专用文件如果以模块方式使用 htmx2.x 为三种主流 JS 模块类型都提供了独立文件模块类型文件ESM 模块/dist/htmx.esm.jsAMD 模块/dist/htmx.amd.jsCJS 模块/dist/htmx.cjs.js浏览器直接加载/dist/htmx.js继续可用本仓库源码中的类型定义文件 src/htmx.esm.d.ts 即对应 ESM 产物可供 TypeScript 项目直接消费。5.2 扩展从核心分发中移除与第四节一致所有扩展不再随核心包分发需单独引入SSE 扩展必须升级其余建议升级到 2.x 版本仍在使用的旧hx-ws/hx-sse属性请迁移到扩展写法。5.3 默认配置项的变化三个可回退点迁移指南明确给出了三处默认值变更均可通过htmx.config回退到 1.x 行为平滑滚动2.x 默认scrollBehavior为instant源码见 src/htmx.js。若想保留 1.0 的平滑滚动改回htmx.config.scrollBehavior smooth该配置的实际消费点在 src/htmx.jsscrollIntoView({ block, behavior: htmx.config.scrollBehavior })决定了目标元素的滚动方式。DELETE请求负载默认methodsThatUseUrlParams为[get, delete]见第二节。若希望DELETE使用表单编码体改回htmx.config.methodsThatUseUrlParams [get]跨域请求2.x 默认selfRequestsOnly为true即禁止向非同源主机发起 htmx 请求源码见 src/htmx.js其生效逻辑见 src/htmx.js。若需要跨域请求改回htmx.config.selfRequestsOnly false5.4hx-on改为hx-on:语法1.x 的hx-on属性用事件名加冒号分隔多条监听在 2.x 中必须改为独立的hx-on:前缀属性。迁移指南给出的对照示例!-- 1.x 写法 -- button hx-get/info hx-onhtmx:beforeRequest: alert(Making a request!) htmx:afterRequest: alert(Done making a request!) Get Info! /button !-- 2.x 写法 -- button hx-get/info hx-on:htmx:before-requestalert(Making a request!) hx-on:htmx:after-requestalert(Done making a request!) Get Info! /button注意由于 HTML 属性名大小写不敏感事件名必须使用kebab-case短横线命名如htmx:before-request。更多用法见 hx-on 属性文档。5.5makeFragment()返回值统一为 DocumentFragment2.x 中htmx.makeFragment()始终返回DocumentFragment不再像 1.x 那样视情况返回Element或DocumentFragment。源码实现见 src/htmx.js它会先对hx-*自定义标签做template转换以安全通过 HTML 解析再剥离head区域、按响应形态解析为片段。依赖旧返回类型的代码需要相应调整。5.6 内部 APIselectAndSwap被swap取代对扩展作者而言内部 API 中的selectAndSwap方法已被移除替换为swap方法内部与公共 htmx API 均可使用。新的调用方式let content divHello world/div; // 将被交换到目标元素的 HTML let target api.getTarget(child); let swapSpec api.getSwapSpecification(child); api.swap(target, content, swapSpec);swap方法的完整文档见 JS API 参考。5.7 IE 支持终止htmx 2.0 不再支持 IEhtmx 1.xv1.htmx.org会继续支持 IE 并在可预见的未来持续维护。六、新特性与源码印证除了破坏性变更本次发布还带来若干新能力均可在本仓库源码中找到实现证据。6.1 配置项忽略嵌套 OOB 交换issue #1235新增配置项allowNestedOobSwaps用于决定是否处理嵌套在主响应元素内部的 out-of-bandOOB交换元素。源码默认值为truesrc/htmx.js/** * Whether to process OOB swaps on elements that are nested within the main response element. * type boolean * default true */ allowNestedOobSwaps: true,实际生效逻辑位于 src/htmx.js 的findAndSwapOobElementsvar oobElts findAll(fragment, [hx-swap-oob], [data-hx-swap-oob]) forEach(oobElts, function(oobElement) { if (htmx.config.allowNestedOobSwaps || oobElement.parentElement null) { const oobValue getAttributeValue(oobElement, hx-swap-oob) if (oobValue ! null) { oobSwap(oobValue, oobElement, settleInfo, rootNode) } } ... })即当allowNestedOobSwaps为false时只有顶层parentElement null的 OOB 元素会被处理嵌套在响应片段内部、随主交换一同插入的 OOB 元素则被忽略。需要时可通过htmx.config.allowNestedOobSwaps false关闭以应对特定的响应结构问题。6.2 新增textContent交换方式issue #23562.0 新增textContent交换风格不把响应解析为 HTML 片段而是直接以纯文本形式写入目标元素的内容。源码位于 src/htmx.js// For text content swaps, dont parse the response as HTML, just insert it if (swapSpec.swapStyle textContent) { target.textContent content } else { let fragment typeof content string ? makeFragment(content) : content ... }用法示例div hx-get/counter hx-swaptextContent hx-triggerevery 1s/div服务器返回纯文本如42时目标元素内容会被直接设置为该文本不会经历 HTML 解析、片段处理与 OOB/partial 交换流程适合计数器、状态文本等纯文本刷新场景。可与其他hx-swap值innerHTML、outerHTML、beforebegin等配合理解详见 hx-swap 属性文档。6.3 完整 JSDoc 与生成的 TypeScript 定义#2336感谢贡献者 Telroshan本版本为htmx.js补齐了完整 JSDoc 注释并生成了 TypeScript 类型定义。本仓库中的 src/htmx.js 与 src/htmx.esm.d.ts 即为成果后者包含HtmxConfig相关字段如wsReconnectDelay、wsBinaryType等让 TypeScript 项目可以获得完整的类型提示与配置项校验。仓库中另有生成脚本 scripts/generate-web-types.mjs 与 JetBrains 编辑器的 web-types 文件 editors/jetbrains/htmx.web-types.json用于编辑器智能提示。6.4 扩展网站上线与 1.x 兼容扩展本次发布同步完成了扩展网站extensions.htmx.org并新增了htmx 1.x 兼容扩展帮助仍依赖部分 1.x 行为的用户在 2.x 中平滑过渡对应文档见 htmx-1-compat。七、升级路径建议综合发布说明与迁移指南从 1.x 升级到 2.x 的推荐路径为先在测试环境验证beta 版本仅供测试不要直接用于生产替换废弃属性把hx-sse/hx-ws属性迁移到对应扩展并确认 SSE 扩展为 2.x 新版本检查DELETE请求确认服务端能接受 URL 参数形式的负载或按需改回methodsThatUseUrlParams [get]替换hx-on语法统一改为hx-on:前缀 kebab-case 事件名评估三项默认值scrollBehavior、selfRequestsOnly、methodsThatUseUrlParams是否与现有页面行为冲突适配 API 变化检查makeFragment()返回类型使用、扩展中的selectAndSwap→swap调用确认模块产物按项目模块体系选用dist/htmx.esm.js、dist/htmx.amd.js、dist/htmx.cjs.js或浏览器版dist/htmx.js享受新特性按需启用textContent交换、allowNestedOobSwaps配置与 TypeScript 类型支持。更完整的迁移细节与示例请以仓库内的 迁移指南 为准各属性的最新语义可对照 参考手册 与 CHANGELOG 进一步核实。赞分享前端【免费下载链接】htmxhtmx - high power tools for HTML项目地址https://gitcode.com/GitHub_Trending/ht/htmx点击查看免费下载相关推荐Hippy React 版本演进全景解读从 1.x 到 3.x 的关键特性与源码印证Hippy React 版本演进全景解读从 1.x 到 3.x 的关键特性与源码印证 本文以仓库内 driver/js/packages/hippy reac跨平台移动开发前端htmx 2.0.0-alpha1 发布详解核心变更、迁移路径与新配置能力htmx 2.0.0 alpha1 发布详解核心变更、迁移路径与新配置能力 htmx 2.0.0 alpha1 是 htmx 迈向 2.x 时代的首个 alp前端Polly.JS 版本演进全解析从 1.x 到 6.x 的破坏性变更、迁移路径与源码印证Polly.JS 版本演进全解析从 1.x 到 6.x 的破坏性变更、迁移路径与源码印证 Polly.JS 是一款用于录制Record、回放Replay测试开发工具上一篇IPXWrapper完整指南3步让经典游戏在现代Windows恢复IPX局域网联机下一篇QModMaster免费开源ModBus主站工具的高效上手指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Dolt MySQL 客户端集成测试套件:本地 Docker 运行、多阶段构建与多语言协议验证全指南

Dolt MySQL 客户端集成测试套件:本地 Docker 运行、多阶段构建与多语言协议验证全指南

数据库关系型数据库后端CLI 【免费下载链接】dolt Dolt – Git for Data 项目地址: https://gitcode.com/GitHub_Trending/do/dolt 点击查看 免费下载 本篇技术指南围绕 Dolt 仓库中的 MySQL/MariaDB 客户端集成测试套件(integration-tests/mysql-clien…

2026/10/1 2:39:02 阅读更多 →
linux-command 命令手册:enable 命令详解——启用与禁用 Shell 内建命令的完整指南

linux-command 命令手册:enable 命令详解——启用与禁用 Shell 内建命令的完整指南

文档教程 【免费下载链接】linux-command Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。https://git.io/linux 项目地址: https://gitcode.com/GitHub_Trending/linux/linux-command 点击查看 免费下载 enable 是 Bash 提供的一个内…

2026/10/1 2:39:02 阅读更多 →
PayloadsAllTheThings 实战指南:Virtual Host(虚拟主机)枚举、指纹识别与 Host 头攻击

PayloadsAllTheThings 实战指南:Virtual Host(虚拟主机)枚举、指纹识别与 Host 头攻击

网络安全应用安全渗透测试 【免费下载链接】PayloadsAllTheThings A list of useful payloads and bypass for Web Application Security and Pentest/CTF 项目地址: https://gitcode.com/GitHub_Trending/pa/PayloadsAllTheThings 点击查看 免费下载 本文基于 Pay…

2026/10/1 2:39:02 阅读更多 →

最新新闻

hindsight 实战:为 LLM Agent 构建长期记忆与 MCP 接入

hindsight 实战:为 LLM Agent 构建长期记忆与 MCP 接入

1. 从 "hindsight" 这个名字说起:为什么记忆是 Agent 最该补的一课第一次看到 "hindsight" 这个词,我脑子里蹦出来的不是词典释义,而是自己踩过的一个坑。去年做客服类 Agent 的时候,用户第一轮说"我上周…

2026/10/1 3:55:44 阅读更多 →
LLM Agent 记忆架构实战:基于 MCP 与混合检索的 Hindsight 设计

LLM Agent 记忆架构实战:基于 MCP 与混合检索的 Hindsight 设计

1. 从“hindsight”说起:为什么我们需要给 Agent 装上“后视镜”“hindsight”这个词本身的意思就是“事后聪明”,或者更直白一点——“马后炮”。但在 LLM Agent 的语境下,它指的是一套让智能体能够回看、检索并利用历史交互信息的记忆机制。…

2026/10/1 3:55:43 阅读更多 →
从零构建AI工程能力:PyTorch+FastAPI+Docker全流程实战指南

从零构建AI工程能力:PyTorch+FastAPI+Docker全流程实战指南

1. 从零搭建AI工程能力:为什么我劝你别一上来就啃论文这两年AI岗位的需求量涨得离谱,但真正能干活的人却少得可怜。我面过不少人,简历上写着“精通深度学习”,结果让他把一个训练好的模型部署成API服务,折腾一下午连环…

2026/10/1 3:55:43 阅读更多 →
深度学习激活函数实战选型指南:ReLU、Sigmoid、Tanh工程权衡

深度学习激活函数实战选型指南:ReLU、Sigmoid、Tanh工程权衡

1. 这不是教科书里的“激活函数”,而是我在调参现场反复撕掉的三十七张草稿纸你有没有过这种体验:模型训练到第83轮,loss曲线突然像被踩了一脚的弹簧一样往上弹;或者明明加了BatchNorm,梯度却在某一层悄无声息地消失&a…

2026/10/1 3:55:43 阅读更多 →
hindsight:LLM Agent 记忆系统的工程化设计与 Docker 落地实践

hindsight:LLM Agent 记忆系统的工程化设计与 Docker 落地实践

1. 从“hindsight”这个词说起:为什么它值得单独拿出来聊第一次看到“hindsight”作为项目标题,我脑子里蹦出来的不是某个具体工具,而是一种能力——事后回看、复盘、从已经发生的事情里提取经验。这个词在英文里常和“20/20 hindsight”搭配…

2026/10/1 3:55:43 阅读更多 →
Docker部署实战:从环境、网络到数据卷的踩坑复盘

Docker部署实战:从环境、网络到数据卷的踩坑复盘

印象里有一次部署,我折腾了大半天:容器日志干干净净,端口也映射了,可宿主机就是访问不了服务。后来才发现根因不是配置写错,而是我对 Docker 网络的理解还停留在“映射端口等于把口子捅开”。其实这类问题特别普遍&…

2026/10/1 3:54:43 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →