rehype
一、rehype 是什么
rehype 是一个用于处理和转换 HTML 的工具生态,基于 AST(抽象语法树) 的方式对 HTML 进行解析、遍历和修改。
它隶属于 unified 体系,专注于 HTML 领域,使用的 AST 规范是 hast。
核心思想是:
将 HTML 转换为结构化数据(AST),通过插件对其进行分析和修改,再输出为 HTML。
二、适用场景
rehype 适用于以下需求:
- 对 HTML 做结构化分析与转换
- 编写插件自动修改 HTML(如标签替换、内容注入、压缩、格式化)
- HTML 代码质量治理(规范化、最小化)
- 构建 HTML 处理流水线(如静态站点生成、内容预处理)
- CLI 场景下批量检查或格式化 HTML 文件
三、核心能力与示例
1. HTML → HTML 转换
通过插件组合,可以将一段 HTML 转换成另一种形式的 HTML,例如:
- 压缩 HTML(移除多余空格、简化属性)
- 修改标签结构(如
h1→h2) - 插入、删除或调整节点
2. 插件机制
- 插件本质是对 AST 的访问与修改函数
- 插件可以遍历节点并修改其属性或结构
- 可自由组合多个插件形成处理管道
四、主要包(Monorepo 结构)
该仓库是一个 monorepo,包含以下核心包:
-
rehype-parse
将 HTML 解析为 AST(hast) -
rehype-stringify
将 AST(hast)转换回 HTML -
rehype
集成unified + rehype-parse + rehype-stringify,适用于 HTML 输入 → HTML 输出的场景 -
rehype-cli
提供命令行工具,用于脚本或工程中的 HTML 检查与格式化
五、插件生态
rehype 拥有丰富的插件生态,插件来源包括官方和社区:
- awesome-rehype:精选优质插件列表
- 官方插件列表:完整插件清单
- GitHub 话题
rehype-plugin:社区维护插件
使用插件时需要自行评估其维护质量与安全性。
六、类型系统
- rehype 及 unified 体系 全面支持 TypeScript
- hast 的类型定义由
@types/hast提供 - 适合在大型工程中进行类型安全的 HTML 处理
七、兼容性
- 与 Node.js 维护版本 保持兼容
- 当前主线版本兼容 Node.js 16
- 新的主版本发布时会移除对已停止维护 Node 版本的支持
八、安全注意事项
- 处理 HTML 可能引入 XSS 风险
- 官方建议搭配使用 rehype-sanitize 进行安全处理
- 使用第三方插件前需评估其潜在安全风险
九、社区与贡献
- 提供完整的贡献指南(contributing)
- 支持通过 Discussions 获取帮助和交流
- 遵循统一的 Code of Conduct
十、许可证
- MIT License
- 作者:Titus Wormer