TemplateMaker 使用文档
基于 Scriban 的强大模板渲染引擎,快速构建和管理您的网站模板
快速开始
只需几个简单步骤,即可开始使用 TemplateMaker 创建和管理您的模板
查看模板列表
列出所有可用的模板及其详细信息
dotnet run template list
渲染模板
将模板和数据结合,生成静态 HTML 页面
dotnet run render A1002
预览效果
启动本地服务器,实时预览渲染结果
dotnet run preview A1002
核心功能
强大的命令行工具,提供完整的模板管理和渲染能力
模板管理
查看、创建和管理模板的基本信息
页面渲染
使用 Scriban 引擎渲染模板页面
实时预览
启动本地服务器进行实时预览
远程获取
从远程服务器下载模板到本地
发布上传
将本地模板发布到远程服务器
资源构建
自动运行 npm build 构建前端资源,将 site.css/site.js 编译为 site.min.css/site.min.js
命令参考
所有可用命令的详细说明和使用示例
template list
列出所有可用的模板
语法:
dotnet run template list
示例:
$ dotnet run template list
template info
查看指定模板的详细信息,包括所有页面配置
语法:
dotnet run template info
参数:
模板的唯一标识符,如 001、A1002 等
示例:
$ dotnet run template info 001
render
渲染模板页面,生成静态 HTML 文件。渲染前自动执行 npm build
语法:
dotnet run render [--page ]
参数:
要渲染的模板 ID
--page
可选,指定要渲染的页面 ID。不指定则渲染所有页面
示例:
$ dotnet run render A1002
$ dotnet run render A1002 --page index
preview
启动本地 Web 服务器,预览已渲染的模板页面
语法:
dotnet run preview [--port ]
参数:
要预览的模板 ID
--port
可选,指定服务器端口,默认为 1688
示例:
$ dotnet run preview A1002
$ dotnet run preview A1002 --port 8080
fetch
从远程服务器获取模板到本地
语法:
dotnet run fetch [--dir ] [--with-resources]
参数:
远程模板的名称
--dir
可选,指定保存模板的本地目录
--with-resources
可选,同时下载模板相关的资源文件
示例:
$ dotnet run fetch MyTemplate
$ dotnet run fetch MyTemplate --dir ./templates/custom
$ dotnet run fetch MyTemplate --with-resources
publish
将本地模板发布到远程服务器
语法:
dotnet run publish [--name ] [--no-resources]
参数:
要发布的本地模板 ID
--name
可选,指定发布到远程的模板名称
--no-resources
可选,不上传资源文件,仅上传模板文件
示例:
$ dotnet run publish 001
$ dotnet run publish 001 --name CustomTemplate
$ dotnet run publish 001 --no-resources
模板结构
了解模板的目录结构和配置文件格式
目录结构
templates/
└── 001/ # 模板目录 (模板 ID)
├── template.json # 模板配置文件 (必需)
├── package.json # npm 包配置
├── tailwind.config.js # Tailwind 配置
├── pages/ # 页面目录
│ ├── index.sbn # 页面模板文件
│ ├── index.data.json # 页面数据文件
│ └── ...
├── components/ # 组件目录
│ ├── layout/ # 布局组件 (header, footer, navigation)
│ │ ├── header.sbn
│ │ ├── footer.sbn
│ │ ├── navigation.sbn
│ │ ├── globalStyles.sbn
│ │ └── globalScripts.sbn
│ └── custom/ # 自定义组件 (业务组件)
│ ├── hero.sbn
│ └── cta.sbn
├── css/ # 样式文件
│ ├── site.css # 源文件
│ └── site.min.css # 编译后的文件
├── js/ # JavaScript 文件
│ ├── site.js # 源文件
│ └── site.min.js # 编译后的文件
└── images/ # 图片资源
└── ...
template.json
定义模板基本信息和所有页面配置
pages/
存放所有页面的 .sbn 模板和 .data.json 数据文件
components/layout/
布局组件,如 header、footer、navigation、全局样式和脚本
components/custom/
自定义业务组件,可在页面中通过 include 引入复用
css/js/images/
静态资源文件。site.css/site.js 为源文件,npm build 编译后生成 site.min.css/site.min.js
template.json 配置
{
"templateName": "我的模板",
"description": "模板描述",
"version": "1.0.0",
"templateType": "business-website",
"author": "Your Name",
"pages": [
{
"pageId": "index",
"pageName": "首页",
"description": "网站首页",
"templateFile": "index.sbn",
"dataFile": "index.data.json",
"outputFile": "index.html",
"pageType": "home"
}
]
}
配置说明
每个模板必须包含 template.json 配置文件,定义模板的基本信息和所有页面配置。
Layout 组件说明
系统预定义的布局组件,名称固定,用于构建页面的基础结构
重要提示
Layout 组件的名称是系统预定义的,不可自定义。所有 layout 组件都是可选的,存在则渲染,不存在则跳过。
所有布局组件由渲染引擎自动引入,无需在模板中手动调用。系统会自动检测 components/layout/ 目录下的组件文件并插入到页面的正确位置。
所有 layout 组件文件必须放在 components/layout/ 目录下。
页面结构盒模型
<style>/* 全局样式 */</style>
<script>...</script>
不可见区域
浏览器可见区域
自动渲染
Header (页面头部)
header
•
TopHeader / Header
页面头部组件。TopHeader为body中最顶部的独立区域(如顶部通知条),Header为页面主要头部区域(如Logo、菜单等)。注意:HeadTop和HeadBottom是位于head标签内的独立组件,不属于Header组件
渲染引擎自动引入,无需手动调用
Navigation (导航栏)
navigation
•
Navigation
网站的主导航菜单,通常包含网站的主要页面链接和菜单项
渲染引擎自动引入,无需手动调用
Footer (页脚)
footer
•
Footer
页面底部的页脚组件,通常包含版权信息、链接、联系方式等
渲染引擎自动引入,无需手动调用
HeadTop (头部上方)
headTop
•
HeadTop
位于
标签内部的上方区域,用于插入额外的meta标签、预加载资源等,在GlobalStyles之前加载渲染引擎自动引入,无需手动调用
HeadBottom (头部下方)
headBottom
•
HeadBottom
位于
标签内部的下方区域,用于插入额外的脚本、样式等,在GlobalStyles之后加载渲染引擎自动引入,无需手动调用
GlobalStyles (全局样式)
globalStyles
•
GlobalStyles
全局CSS样式引用,会被自动插入到 HTML
标签中渲染引擎自动引入,无需手动调用
GlobalScripts (全局脚本)
globalScripts
•
GlobalScripts
全局JavaScript脚本引用,会被自动插入到 HTML 底部
渲染引擎自动引入,无需手动调用
BodyTop (主体顶部)
bodyTop
•
BodyTop
页面主体内容区域的顶部,位于
标签开始之后渲染引擎自动引入,无需手动调用
BodyBottom (主体底部)
bodyBottom
•
BodyBottom
页面主体内容区域的底部,位于 标签结束之前
渲染引擎自动引入,无需手动调用
Layout 组件的渲染顺序
Scriban 模板语法
使用强大的 Scriban 模板引擎构建动态页面
{{ 变量输出
使用双大括号输出变量值
{{ title }}
{{ user.name }}
~ 空白控制
使用波浪号控制输出的空白字符
{{~ include 'header' ~}}
for 循环遍历
使用 for 循环遍历数组或列表
{{~ for item in items ~}}
{{ item.name }}
{{~ end ~}}
{{~ for item in items ~}}
{{ for.index }}: {{ item }}
{{~ end ~}}
if 条件判断
使用 if/else 进行条件判断
{{~ if user.isAdmin ~}}
管理员
{{~ end ~}}
{{~ if count > 0 ~}}
有数据
{{~ else ~}}
无数据
{{~ end ~}}
inc 包含组件
使用 include 引入其他模板或组件
{{~ include 'layout/header' ~}}
{{~ include 'heroSection' ~}}
| 管道操作符
使用管道对值进行转换和格式化
{{ title | upcase }}
{{ items | array.size }}
最佳实践
遵循这些建议,创建高质量、易维护的模板
组件化开发
将可复用的界面元素封装为独立组件,提高代码复用率
- layout组件:存放header、footer、navigation等布局组件
- custom组件:存放业务相关的可复用组件
- 通过 include 引入组件实现复用
数据分离
将数据与模板分离,便于内容管理和多语言支持
- 使用 .data.json 文件存储页面数据
- 模板中只处理展示逻辑,数据从外部传入
- 便于实现内容的动态更新和多语言版本
命名规范
遵循统一的文件和变量命名规范,提升项目可维护性
- 页面文件: pageId.sbn 和 pageId.data.json
- 组件文件: 使用小驼峰命名,如 heroSection.sbn
- 变量名使用有意义的英文单词
性能优化
优化模板结构和资源加载,提升页面渲染速度
- 避免深层嵌套的 for 循环
- 合理使用空白控制符 ~ 减少输出体积
- 使用 Tailwind 等工具进行 CSS 优化
错误处理
添加适当的错误处理和默认值,提高模板健壮性
- 检查变量是否存在: {{~ if items ~}}
- 提供默认值: {{ title ?? '默认标题' }}
- 使用 try-catch 处理可能的错误
版本控制
使用 Git 管理模板版本,记录每次修改
- 为每个重要版本打 tag
- 在 template.json 中维护版本号
- 记录清晰的 commit message
常见问题
快速找到常见问题的解答
如何创建一个新的模板?
在 templates 目录下创建新文件夹(使用唯一 ID 作为文件夹名),然后创建 template.json 配置文件和页面文件。参考现有模板的结构进行创建。
templates/
└── myTemplate001/
├── template.json
└── pages/
├── index.sbn
└── index.data.json
渲染时出现错误怎么办?
系统会显示详细的错误信息,包括错误的组件名称、类型和具体错误内容。同时会生成包含错误信息的 HTML 文件便于调试。检查模板语法、变量名称和数据文件是否正确。
如何使用自定义组件?
系统区分两种组件:layout组件(header/footer/navigation等布局组件)和custom组件(业务组件)。自定义组件放在 components/custom/ 目录下,布局组件放在 components/layout/ 目录下。
# 引入布局组件
{{~ include 'layout/header' ~}}
# 引入自定义组件
{{~ include 'heroSection' ~}}
如何配置 Tailwind CSS?
在模板目录下创建 tailwind.config.js 和 package.json 文件,配置 Tailwind。运行 render 命令时会自动执行 npm build 构建样式文件,生成 site.min.css。
渲染后的文件保存在哪里?
渲染后的 HTML 文件和静态资源会保存在对应模板目录下的 output 目录中。css 和 js 目录中的 site.min.css 和 site.min.js 会被自动复制到输出目录。
templates/001/output/
├── index.html
├── css/
│ └── site.min.css
└── js/
└── site.min.js
如何实现多语言支持?
为每种语言创建独立的 .data.json 文件(如 index.en.data.json、index.zh.data.json),然后在渲染时指定使用哪个数据文件。
相关资源
探索更多文档和工具,充分利用 TemplateMaker