12 个版本 (6 个重大变更)
| 0.7.1 | 2024 年 2 月 19 日 |
|---|---|
| 0.7.0 | 2023 年 10 月 13 日 |
| 0.6.1 | 2022 年 9 月 7 日 |
| 0.6.0 | 2022 年 7 月 20 日 |
| 0.4.0 | 2021 年 11 月 13 日 |
#105 in 模板引擎
每月 61 次下载
340KB
1.5K SLoC
petridish
如果你听说过 cookiecutter 项目,petridish 是它的 Rust 实现。
功能
| 功能 | 描述 |
|---|---|
| 跨平台 | Windows、Linux、MacOS |
| 更灵活的配置 | petridish 使用 toml 文件定义模板变量 |
| 更人性化的提示 | 支持不同类型的提示(input、select、multi select、confirm) |
| 强大的模板引擎 | 我们使用 tera 作为我们的模板引擎,它是基于 Jinja2/Django 的 |
| 一个二进制文件 | 一个二进制文件在任何地方运行 |
| 管理缓存模板 | 如果你下载了一个远程模板,它将被缓存,因此以后你可以直接使用其名称而不必再次下载。你还可以 list 或 remove 这些缓存模板 |
用法
类似于 cookiecutter,你应该提供如下目录结构

让我们看看 petridish.toml 文件
[petridish]
project_prompt = "project name?"
project_var_name = "project_name"
short_description = "This is an awesome template"
[[prompts]]
name = "name"
prompt = "what's your name"
type = "string"
[[prompts]]
name = "age"
choices = [10, 20, 30]
default = 20
type = "number"
[[prompts]]
name = "hobby"
choices = ["running", "swimming"]
multi = true
type = "string"
[[prompts]]
name = "is_geek"
type = "bool"
default = true
Petridish 配置
| 字段 | 描述 | 可选 |
|---|---|---|
| project_prompt | 用于 project_var_name 的提示信息,默认为 project name? |
✅ |
| project_var_name | 项目变量名称,默认为 project_name |
✅ |
| short_description | 模板的简短描述,将在子命令 list 中显示 |
✅ |
| long_description | 模板的详细描述,将在第一次提示之前显示(支持 Markdown 高亮) | ✅ |
提示配置
| 提示类型 | 字段 | 描述 | 可选 |
|---|---|---|---|
| 字符串输入 | name | 模板变量名称 | |
| 提示 | 提示信息 | ✅ | |
| 默认 | 默认为空,支持模板渲染 | ✅ | |
| 正则表达式 | 正则表达式模式,提示值必须匹配该模式 | ✅ | |
| 类型 | 必须是 string |
||
| 数字输入 | name | 模板变量名称 | |
| 提示 | 提示信息 | ✅ | |
| 默认 | 默认为0 | ✅ | |
| 最小值 | 最小值 | ✅ | |
| 最大值 | 最大值 | ✅ | |
| 类型 | 必须是 number |
||
| 选择 | name | 模板变量名称 | |
| 提示 | 提示信息 | ✅ | |
| 选项 | 选项项 | ||
| 默认 | 默认值 | ✅ | |
| 类型 | string 或 number |
||
| 多选 | name | 模板变量名称 | |
| 提示 | 提示信息 | ✅ | |
| 选项 | 选项项 | ||
| 默认 | 默认值 | ✅ | |
| 多选 | 必须是 true |
||
| 可空 | 是否可以为空值,默认 false |
✅ | |
| 类型 | string 或 number |
||
| 确认 | name | 模板变量名称 | |
| 提示 | 提示信息 | ✅ | |
| 默认 | 默认值(默认 false) |
✅ | |
| 类型 | 必须是 bool |
远程git缩写
petridish 知道Github(gh)和GitLab(gl)项目的缩写
格式应该是这样的 <abbreviation>[+<protocol>]:<namespace>/<project>
protocol 可以是:https, http, ssh,(默认是 https)
$ petridish new gh+https:petridish-dev/example
$ petridish new example # later you can just use its name
如果远程http(s)项目是私有的,petridish 将提示输入 username 和 password 进行授权。
示例

模板
Tera 模板只是一个文本文件,在渲染时变量和表达式会被值替换。语法基于 Jinja2 和 Django 模板。
有 3 种分隔符,且不能更改
- {{ 和 }} 用于表达式
- {% 和 %} 用于语句
- {# 和 #} 用于注释
更多语法细节可以在 tera 中找到。
依赖
~23–40MB
~688K SLoC