@fluixi/template-parser

中文文档
1.0.0-alpha.108发布于 2026/11/07MITTypeScriptESM + CJS零依赖近 30 天下载 3976

html''模板的无依赖的标语和递归-后端解析器,生成一个位置可回收的AST;由编译器和TypeScript插件共享

中文使用文档
文档目录6 节
  1. 为什么一个单独的解析器
  2. 使用量
  3. 如何解释
  4. 扩展性
  5. 诊断
  6. 许可证

@fluixi/腾讯-parser

Fluixi 的解析器 html`...` 模板:无依赖的标识符+ 生成一个 位置, 可恢复的模板 AST。 。 。 .

它是需要理解模板的一切的共同基础。 今天,我们.. 实值 @fluixi/compiler 财务报告和审定财务报表 @fluixi/ts-plugin; 要点 拆分就是他们同意一个语法,一个节点模型和一组 诊断,且一个前题或语言服务器可以稍后加入,无需秒 语法出现.

为什么一个单独的解析器

编译器曾将模板文本用一通直接扫描成代码源IR. 这对排放代码是罚款,但对于工具没有用处:没有源跨度,没有 诊断,没有错误恢复, 和硬接通 Babel。 这个包是 解析层分出,使每个工具都能再利用:

pieces → Reader (lexing + holes) → parseTemplate → Template AST
                                                      │
                    ┌─────────────────────────────────┴──────┐
               compiler (→ IR)                            TS plugin

解析器从不解决内部的 JavaScript ${...}。每个孔被记录为 a 一个 不透明槽 (指数+源跨). 下游,每个工具绑住槽 对它自己的代表:汇编器中的 Babel 节点, a ts.Expression 在TS系统中 插件, 格式中的原始文本 。 单接线是保持 解析器主机-不可知.

使用量

import { parse } from '@fluixi/template-parser';

const { root, diagnostics } = parse([
  '<button @click=',        // static segment 0
  '>',                      // hole 0 sits between segment 0 and 1
  '</button>',              // static segment 1
]); // → <button @click=${…}>${…}</button>

parse(statics) 取静态字符串片段(比 和返回 { root, diagnostics }。具有真实源位置的主机 构建 Piece[] 直接(通过) parseTemplate所以,每一个跨度地图回 原始档案.

如何解释

标准 HTML,组件(<Button/>, (中文(简体) ), <Ctx.Provider>),碎片(<>, (中文(简体) ), 注释, SVG, 原始文本元素, 空白元素, 以及完整绑定的表面 :

语法节点
name, (中文(简体) ), name="x", (中文(简体) ), name=${x}, (中文(简体) ), name="a ${x} b"AttributeNode
?disabledAttributeNode (布尔)
.currentTime=${t}PropertyBindingNode
@click=${h} 编号 : onClick=${h}EventBindingNode
ref=${el}RefBindingNode
...${props} 编号 : ${obj}SpreadNode
if=${c} 编号 : elseIfDirectiveNode 编号 : ElseDirectiveNode
each=${xs} (+ 数) key(中文(简体) )EachDirectiveNode
bind:value=${sig}BindDirectiveNode
class:active=${on}ClassDirectiveNode
style:color=${c}StyleDirectiveNode
use=${d} 编号 : use:tooltipUseDirectiveNode

扩展性

添加指令是指令中的新条目 登记永远不变 到核心解析器 :

import { CORE_DIRECTIVES, parseTemplate, type DirectiveDescriptor } from '@fluixi/template-parser';

const highlight: DirectiveDescriptor = {
  id: 'highlight',
  match: (name) => name === 'highlight',
  build: (raw) => ({ kind: 'Attribute', name: 'data-highlight', value: raw.value, boolean: false, loc: raw.loc }),
};

parseTemplate(pieces, { directives: [highlight, ...CORE_DIRECTIVES] });

诊断

解剖师从不扔 也从不拖延 它从错误的输入中恢复 解析:未关闭/不匹配/出错标签,未终止 注释、重复指令和无效约束。 每个诊断都带有 SourceSpan。 。 。 .

许可证

麻省理工学院

版本与发布记录

@fluixi/template-parser 共发布 14 个版本,首次发布于 2026/07/13;过去 12 个月发布了 14 个版本。

版本发布日期距今
1.0.0-alpha.108latest2026/11/078 天前
1.0.0-alpha.1072026/11/0511 天前
1.0.0-alpha.1062026/11/0213 天前
1.0.0-alpha.1052026/11/0115 天前
1.0.0-alpha.1042026/11/0115 天前
1.0.0-alpha.1032026/10/2620 天前

关于 @fluixi/template-parser 的常见问题

@fluixi/template-parser 是什么?

html''模板的无依赖的标语和递归-后端解析器,生成一个位置可回收的AST;由编译器和TypeScript插件共享

如何安装 @fluixi/template-parser?

在项目目录运行 npm install @fluixi/template-parser,或使用 pnpm add / yarn add / bun add。

@fluixi/template-parser 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@fluixi/template-parser 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@fluixi/template-parser 可以商用吗?

@fluixi/template-parser 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@fluixi/template-parser 的下载量有多少?

根据 npm 官方下载统计,@fluixi/template-parser 在 2026/10/15 – 2026/11/13 这 30 天内被下载 3,976 次,日均约 133 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@fluixi/template-parser 还在维护吗?

最新版本 1.0.0-alpha.108 发布于 2026/11/07(8 天前);至今共发布 14 个版本,其中过去 12 个月发布了 14 个;首次发布于 2026/07/13。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。