15 个版本
0.4.0 | 2023 年 8 月 2 日 |
---|---|
0.3.0 | 2021 年 7 月 10 日 |
0.2.1 | 2020 年 2 月 7 日 |
0.1.8 | 2018 年 9 月 30 日 |
0.0.1 | 2018 年 2 月 15 日 |
#442 in 开发工具
在 uobors_cli 中使用
375KB
1K SLoC
kickstart
一个 CLI 工具,通过使用预先制作的模板轻松启动新项目。这是 Python 中等效工具的一个稍微强大一些的版本,类似于 cookiecutter。它是 NodeJS 项目(如 Yeoman 或 Slush)的替代品。
安装
kickstart
只可通过 crates.io 获取
$ cargo install kickstart
或者作为预构建的二进制文件 在发行页面 上。
运行 kickstart --help
以查看所有可用命令及其标志/选项的完整列表。
特性
- 跨平台:支持 Windows、Mac 和 Linux
- 单个二进制文件:无需安装虚拟环境或其他任何东西
- 易于使用
- 目录名称和文件名可以进行模板化:例如,
{{ repo_name }}/{{author}}.md
是一个有效的路径 - 所有模板化都通过 Tera(受 Jinja2 启发)进行
- 选择自己的冒险:支持基于先前答案的条件问题
- 它可以从本地目录或 Git 仓库加载模板
- 它具有条件清理功能,以确保在生成后输出目录中不包含不相关的文件
- 可以为任何类型的项目/语言创建模板
- 案例转换过滤器,例如
camelCase
到CamelCase
与 cookiecutter 相比,主要的缺点是缺乏钩子脚本支持,但这可以通过条件清理稍微缓解。
最后,由于Windows不允许在文件路径中使用|
,您可以使用$$
分隔符来代替tera内置过滤器。
注意,在文件模板中,您应继续使用|
进行过滤,因为$$
语法仅适用于文件和目录。请记住,Windows不允许使用()
字符,因此如果您想要跨平台,请不要使用过滤器参数。
试试看
# From the root of this repo
$ kickstart examples/super-basic
$ kickstart examples/complex -o Hello
# Anywhere
$ kickstart https://github.com/Keats/kickstart -s examples/super-basic
$ kickstart https://github.com/Keats/kickstart-sample -o sample
创建自己的模板
创建模板相对简单:创建文件,然后在根目录中添加一个template.toml
文件。以下是其中所有可用的字段的描述
# Required, name of the template
name = "Django"
# Optional, longer form description
description = "A fully-featured Django template"
# Required, the version of the kickstart schema, currently only `1` is used
kickstart_version = 1
# Optional, the URL of the template
url = "https://google.com"
# Optional, a list of authors for this template
authors = [
]
# Optional, a list of keywords for this template
keywords = [
]
# Optional, those files will NOT be copied over when generating the template
# Use it to remove template-specific like its CI or its README/docs
ignore = [
"README.md",
"CONTRIBUTING.md",
".travis.yml",
"docs",
]
# If this is set, kickstart will use this directory as a base for the template instead of
# the root directory. This is useful when your template has its own documentation/CI/etc and you don't want
# to ignore it.
directory = "some-directory"
# Optional, a list of patterns. All files matching one of the patterns will
# be copied over without going through Tera.
# Use it for files that contain syntax similar to Tera for example
copy_without_render = [
"*.html",
]
# Optional, a list of cleanup actions to do.
# All paths listed will be deleted if the `name` has the value `value` after
# the questions have been answered and the project generated.
cleanup = [
{ name = "spa", value = true, paths = ["{{ project_name }}/templates/"]},
{ name = "auth_method", value = "none", paths = ["{{ project_name }}/docs/auth.md"]},
]
# A list of variables, the schema is explained in detail below
[[variables]]
name = "project_name"
default = "my-project"
prompt = "What is the name of this project?"
validation = "^([a-zA-Z][a-zA-Z0-9_-]+)$"
[[variables]]
name = "database"
default = "postgres"
prompt = "Which database do you want to use?"
choices = ["postgres", "mysql", "sqlite"]
[[variables]]
name = "pg_version"
default = "10.4"
prompt = "Which version of Postgres?"
choices = [
"10.4",
"10.3",
"10.2",
"10.1",
"9.6",
"9.5",
"9.4",
"9.3",
]
only_if = { name = "database", value = "postgres" }
[[variables]]
name = "auth_method"
default = "jwt"
prompt = "How are users going to be authenticated?"
choices = ["jwt", "sessions", "none"]
[[variables]]
name = "sentry"
default = true
prompt = "Do you want to add Sentry integration?"
[[variables]]
name = "spa"
default = false
prompt = "Is the frontend a SPA?"
[[variables]]
name = "js_framework"
default = "React"
prompt = "Which JS framework do you want to setup?"
choices = [
"React",
"Angular",
"Vue",
"None",
]
only_if = { name = "spa", value = true }
[[variables]]
name = "typescript"
default = true
prompt = "Do you want to use TypeScript?"
only_if = { name = "spa", value = true }
变量有以下必需字段
name
:Tera上下文中变量的名称default
:该问题的默认值,kickstart
使用该值推断值的类型(目前仅支持字符串、布尔型和整数型)prompt
:显示给用户的文本
还有三个可选字段
choices
:一组可能的值,kickstart
将让用户选择其中一个only_if
:只有当变量name
具有值value
时,这个问题才会被提出validation
:获取字符串值时要检查的正则表达式模式
模板列表
大小写转换过滤器
提供了大小写转换过滤器(通过heck)
upper_camel_case
:UpperCamelCasecamel_case
:lowerCamelCasesnake_case
:snake_casekebab_case
:kebab-caseshouty_snake_case
:SHOUTY_SNAKE_CASEtitle_case
:Title Caseshouty_kebab_case
:SHOUTY-KEBAB-CASE
您可以使用这些过滤器,就像使用其他过滤器一样,例如{{variable_name | camel_case}}
。
更新日志
0.4.0 (2023-08-02)
- 添加大小写转换过滤器
- 更新依赖项
0.3.0 (2021-07-10)
- 更新依赖项
0.2.1 (2020-02-07)
- 允许在文件名/目录中使用
$$
作为过滤器
0.2.0 (2020-01-09)
- 更新所有依赖项
- 将
directory
字段添加到模板定义中,以更改模板目录 - VCS文件现在不再自动忽略
0.1.8 (2018-09-30)
- 允许从子目录加载模板
0.1.7 (2018-08-09)
- 与Git别名一起工作
- 现在该crate既可以作为库也可以作为二进制文件使用
0.1.6 (2018-08-02)
- 向主命令添加
--no-input
标志以从默认值生成模板 - 在
validate
命令中验证模板是否只使用允许的TOML类型(字符串、整数和布尔型) - 改进问题UI
0.1.5 (2018-07-31)
- 修复git clone命令
0.1.4 (2018-07-31)
- 修复缺失的错误显示实现
- 修复TOML错误未显示
- 修复不应提问时多层问题被提问
0.1.3 (2018-07-31)
- 添加模式以匹配问题中的on
0.1.2 (2018-07-31)
- 添加可选的
validation
字段以验证字符串是否与正则表达式匹配 - 添加颜色和加粗到CLI
- 使用
git
命令而不是git2 crate以避免一些构建问题 - 将
cleanup
字段添加到模板定义中,用于生成后的清理 - 向
validate
命令添加,用于诊断template.toml
文件中的错误
依赖关系
约8-18MB
约235K SLoC