@accordproject/template-engine

中文文档
5.3.0发布于 2026/10/20Apache-2.0TypeScriptCommonJS构建来源已验证近 30 天下载 3618

从模板Mark + JSON 数据生成协议马克

中文使用文档
文档目录19 节
  1. 资源
  2. 执行管道概览
  3. 你好,世界模板
  4. 模板数据模型
  5. TemplateMark( 延长标记)
  6. 从数据生成协议马克( JSON)
  7. 产出协议马克(JSON)
  8. 下一步
  9. 为什么要创建新的模板引擎 ?
  10. 1. 输入和输出格式不可知论
  11. 2. TemplateMark 作为定义格式
  12. 3. 充分逻辑支持
  13. 4. 类型安全
  14. 5. 数据模型
  15. 6. 汇编
  16. 安装
  17. 浏览器使用量
  18. LLM 提供者
  19. 许可证

模板引擎

这是 协议项目 模板引擎。 rich-text模板在TemplateMark中被定义(要么作为markdown文件,要么作为JSON文档),然后被与JSON数据合并生成出输出文件. 模板可能包含 类型脚本 表达.

资源

核心模板引擎是JSON到JSON的转换,将TemplateMark JSON +协议数据(JSON)转换为AccordMark JSON.

说明:使用 @accordproject/markdown-transform 项目将下标模板转换为模板Mark JSON并转换为输出格式(HTML,PDF,DOCX等). 用于命令行使用请使用 @accordproject/template-cli。 。 。 .

TemplateMark是一个描述丰富文本模板的文档对象模型,有嵌入式变量,有条件部分,公式等. TemplateMark使用嵌入式TypeScript表达式进行条件和计算.

模板马克和协议马克的格式使用 音乐会 数据建模语言.

在高层次上,模板引擎将模板Mark DOM转换为协议Mark DOM,评价有条件的节和公式的TypeScript表达式,并用所提供的协议数据的可变值来替换可变引用.

Template Interpreter

执行管道概览

在内部,模板引擎通过结构化执行管道评价模板:

  1. 类型验证
    TemplateMark JSON文件和收到的协议数据根据各自的Concerto模型进行验证,以确保结构和类型正确.

  2. 类型脚本汇编
    嵌入式类型脚本表达式(如条件、条款和公式)使用 TemplateMarkToJavaScriptCompiler。 。 。 .

  3. 用户代码评价
    在协议生成过程中,使用 JavaScriptEvaluator。 。 。 .
    评价员支持两项执行战略:

    • evalDangerously() ——直接在当前进程内执行JavaScript. 这只应用于可信任的代码或沙盒环境中(如浏览器).
    • evalChildProcess() ——执行JavaScript在一个孤立的Node.js子进程,以提高安全和隔离性,被推荐为服务器上不可信的模板内容.
  4. 协议马克生成
    TemplateMark文档被切换,评估值被插入到文档结构中,并生成了AccordMark JSON文档.

  5. 输出验证
    生成的协议马克文档在返回前被验证 .

这种分层结构确保类型安全、确定模板逻辑的执行以及运行时间评价期间的隔离.

你好,世界模板

让我们创造最简单的模板 想象,臭名昭著"你好世界"!

此测试的代码为: https://github.com/accordproject/template-engine/blob/main/test/helloWorld.ts 页面存档备份,存于互联网档案馆

模板数据模型

首先在Concerto语法中创建模板数据模型. 数据模型定义了要与模板合并的数据的结构. 在这种情况下,模板模型包含一个属性 message 类型 String需要财产(不是 optional) (中文(简体) ).

namespace [email protected]

@template
concept TemplateData {
    o String message
}

TemplateMark( 延长标记)

下一个定义模板的模板 Mark 。 这样的话,就是普通文字世界 "Hello" 后面是空格,然后是变量 message 接下来是 "."。 。 。 .

Hello {{message}}.

请注意,在这种情况下,模板是使用扩展的标记下语法(富文本有嵌入变量等)定义的. 这个 @accordproject/markdown-transform 套件用于将标记降为模板Mark JSON,供模板引擎使用.

从数据生成协议马克( JSON)

定义一个 实例 会 议 日 程 和 议 程 [email protected] 数据模型。 在此情况下,确定 message 属性到字符串“世界”.

const data = {
    $class: '[email protected]',
    message: 'World',
};

产出协议马克(JSON)

当TemplateMark和数据JSON被传递到Template Engine上时,它就将两者合并起来,在这种情况下,只是简单地替换了引用 message 变量,并生成 AccordMark JSON 文档.

然后,可将本协议的Mark JSON文件转交给 @accordproject/markdown-transform 用于转换到下标、PDF、HTML的模块.

{
    "$class": "[email protected]",
    "xmlns": "http://commonmark.org/xml/1.0",
    "nodes": [
        {
        "$class": "[email protected]",
        "nodes": [
            {
            "$class": "[email protected]",
            "nodes": [
                {
                "$class": "[email protected]",
                "text": "Hello "
                },
                {
                "$class": "[email protected]",
                "value": "World",
                "name": "message",
                "elementType": "String"
                },
                {
                "$class": "[email protected]",
                "text": "."
                }
            ]
            }
        ]
        }
    ]
}

下一步

"Hello World"的例子只是刮了可以完成的表面! TemplateMark可以定义可选部分,有条件部分,TypeScript公式/计算,甚至参考外部数据.

参见 满 详情请举出例子.

更详细的语法文档即将到来! 阅读现有文档: https://docs.accordproject.org/docs/markup-templatemark.html 页面存档备份,存于互联网档案馆

为什么要创建新的模板引擎 ?

有许多巨大的开源模板引擎可用,例如 胡子, (中文(简体) ), 处理栏 或者说 EJS (英语),那么为什么还要创造另一个呢?

1. 输入和输出格式不可知论

大部分的模板引擎都是基本的 基于文本 ——即将模板作为文本字符串,被颂"查找并替换"的机器. 这种方法在模板的输入格式(比如DOCX文件)和模板引擎的输出之间建立了耦合,在DOCX模板的情况下,模板引擎必须是DOCX文件. 这使得支持多种输入和输出格式变得困难.

Agree Project模板引擎会打破模板输入格式和引擎输出格式之间的耦合,将数据格式转换移出核心模板引擎. 引擎层面的模板为TemplateMark JSON文档,模板引擎的输出为AccordMark JSON文档. 单独的库用于将源模板转换为TemplateMark JSON,或者将AccordMark JSON转换为输出格式.

这种灵活性可以创建一个可被标记下模板,用于创建HTML,PDF或DOCX. 人们甚至可以想象使用DOCX模板来创建HTML或PDF文件,或其他情景.

2. TemplateMark 作为定义格式

TemplateMark JSON是一个定义明确的文件格式,指可以创建强大的模板编辑器来定义它:包括用于定义条件区段的部件和用户经验,以及公式,并提供模板预览和综合测试. 我们认为,模板编辑比文字处理更接近编程.

我们鼓励这个领域的社区和商业创新!

3. 充分逻辑支持

与一些禁止或尽量减少模板中逻辑的诱导系统不同,Accord Project模板完全包含可能包含复杂逻辑的模板:有条件的逻辑来决定要包含什么文本,甚至计算,例如根据抵押期限,金额和利率来计算抵押贷款的月付款.

4. 类型安全

鉴于模板能够包含逻辑,必须确保模板 保险 - 即当一个模板与结构良好的数据合并时,保证产生结构良好的输出.

太多的诱导引擎在运行时以不可预测的方式出故障,或者在提交数据时静悄悄地产生无效输出——这对企业的使用来说是不可接受的.

因此,项目模板 强型。模板中的逻辑用 类型脚本. TypeScript是一种很强型的通用编程语言,由充满活力的开源和企业社区支持. TypeScript 编译为 JavaScript,以方便大多数平台的执行.

5. 数据模型

带有模板变量的丰富文本与 音乐会数据模型. Concerto数据模型定义了模板所需数据的结构,用于静态地编译模板并验证类型安全性,在运行时也用于确保所接入的数据结构完善.

6. 汇编

模板可能被静态编译到TypeScript程序,强制进行类型安全,确保运行时不需要不安全的代码评价("eval"),并放宽对应用程序的整合.

模板编译器是一个单独的项目,在这里托管: https://github.com/accordproject/template-compiller 互联网档案馆的存檔,存档日期2013-12-21

安装

请注意,本模块主要针对工具作者,或开发者将模板引擎嵌入应用程序中. 关于命令行的使用,请参见 @accordproject/template-cli 软件包,可以执行一个完整的管道,将下调模板加上JSON数据转换为支持的输出格式,如HTML、DOCX或PDF.

npm install @accordproject/template-engine --save

要求节点.js >= 22.

浏览器使用量

软件包发布时有两个切入点:

  • lib/index.js ——节点js建设(tsc 输出,通过 lib/index.d.ts) (中文(简体) ).
  • umd/template-engine.js ——预建的UMD浏览器捆绑(参考: browser 字段,所以捆绑者会自动把它捡起来用于网页构建).

完全作者和运行的循环作品 在浏览器中 分析模板到模板Mark, 类型检查,将其嵌入式类型Script逻辑编译为JavaScript,并评价它——哪个 是什么权力 模板播放场用于 方便的捆绑也再出口 ModelManager (音乐会)和 TemplateMarkTransformer 因此,一个单捆可以运行整个 model -> template -> agreement 流动 一个协奏曲实例:

<script src="https://unpkg.com/@accordproject/template-engine/umd/template-engine.js"></script>
<script>
  const { ModelManager, TemplateMarkTransformer, TemplateMarkInterpreter } = window['template-engine'];
  const modelManager = new ModelManager();
  modelManager.addCTOModel('namespace [email protected]\n@template\nconcept TemplateData { o String name }');
  const templateMark = new TemplateMarkTransformer()
    .fromMarkdownTemplate({ content: 'Hello {{name}}!' }, modelManager, 'contract');
  const engine = new TemplateMarkInterpreter(modelManager, {});
  const agreement = await engine.generate(templateMark, { $class: '[email protected]', name: 'World' });
</script>

关于浏览器限制的说明 :

  • 进口的逻辑 任意 第三方包必须作为 编译归档 (JavaScript逻辑,已捆绑的依赖性——由Node.js生产出离线). 在浏览器中, 源文件 (TypeScript logical) 根据一组固定的被支持的运行时间依赖性来编译.
  • Template.fromDirectory()编号 :fromUrl() 和子进程逻辑评价是仅节点 浏览器装入模板通过 Template.fromArchive(buffer) 并使用默认的流程评估器.

浏览器捆绑由 Playwright 测试在 e2e/ 工作空间, 负载 umd/template-engine.js 变成无头铬并运行一个真正的 generate()。 。 。 .

LLM 提供者

可选 LLM 执行器 通过官方与供应商交谈 SDKs (英语). 这些是 可选同伴依赖关系 ——没有安装模板 因此,为您使用的每个供应商安装 SDK :

提供者软件包
anthropic@anthropic-ai/sdk
openai, (中文(简体) ), ollama, (中文(简体) ), openai-compatibleopenai
groqgroq-sdk
google@google/genai
mistral@mistralai/mistralai
openrouter@openrouter/sdk
npm install @anthropic-ai/sdk

在Node.js中,SDK在第一次使用时被包名加载. Bundlers (Vite, web package,.) 无法使用 解决该运行时间查询, 因此浏览器应用程序应该通过 sdkLoaders - 单字 import() 他们支持的每个提供者——所以他们的捆绑机包括SDK:

const processor = new TemplateArchiveProcessor(template, llmConfig, {
  anthropic: () => import('@anthropic-ai/sdk'),
  openai: () => import('openai'), // also used by `ollama` and `openai-compatible`
});

同样的装载器被接受 new LLMExecutor(template, config, sdkLoaders) 财务报告和审定财务报表 createReasoner(providerConfig, sdkLoaders)。 。 。 .

这个 openai SDK( 也由 ollama 财务报告和审定财务报表 openai-compatible)和 @anthropic-ai/sdk SDK 软件 拒绝在浏览器中运行, 除非提供者配置选择使用 clientOptions: { dangerouslyAllowBrowser: true }。只有当您接受 API 密钥时才会这样做 任何使用此页面的人都可以看到,例如,用户提供自己的密钥;否则就呼叫 服务器的提供者.

许可证

Accord Project源代码文件在位于LICENSE文件的Apache许可证2.0版本(Apache-2.0)下提供. 项目文件文件根据创用CC-BY-4.0国际许可证提供 http://creativecommons.org/licenses/by/ 4.0/ 页面存档备份,存于互联网档案馆。 。 。 .

版本与发布记录

@accordproject/template-engine 共发布 56 个版本,首次发布于 2023/03/20;过去 12 个月发布了 13 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
5.3.0latest2026/10/2018 天前
5.2.02026/10/071 个月前
5.1.02026/09/151 个月前
5.0.02026/09/151 个月前
4.2.12026/09/022 个月前
4.0.02026/06/045 个月前

关于 @accordproject/template-engine 的常见问题

@accordproject/template-engine 是什么?

从模板Mark + JSON 数据生成协议马克

如何安装 @accordproject/template-engine?

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

@accordproject/template-engine 支持 TypeScript 吗?

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

@accordproject/template-engine 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@accordproject/template-engine 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@accordproject/template-engine 可以商用吗?

@accordproject/template-engine 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@accordproject/template-engine 的下载量有多少?

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

@accordproject/template-engine 还在维护吗?

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