#tera #scaffolding #tera-templates #templating #boilerplate #generator #template-engine

bin+lib kickstart

通过使用由 Tera 引擎支持的模板来快速搭建项目的简单方法

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 中使用

MIT 许可证

375KB
1K SLoC

kickstart

一个 CLI 工具,通过使用预先制作的模板轻松启动新项目。这是 Python 中等效工具的一个稍微强大一些的版本,类似于 cookiecutter。它是 NodeJS 项目(如 YeomanSlush)的替代品。

Crates.io

kickstart.gif

安装

kickstart 只可通过 crates.io 获取

$ cargo install kickstart

或者作为预构建的二进制文件 在发行页面 上。

运行 kickstart --help 以查看所有可用命令及其标志/选项的完整列表。

特性

  • 跨平台:支持 Windows、Mac 和 Linux
  • 单个二进制文件:无需安装虚拟环境或其他任何东西
  • 易于使用
  • 目录名称和文件名可以进行模板化:例如,{{ repo_name }}/{{author}}.md 是一个有效的路径
  • 所有模板化都通过 Tera(受 Jinja2 启发)进行
  • 选择自己的冒险:支持基于先前答案的条件问题
  • 它可以从本地目录或 Git 仓库加载模板
  • 它具有条件清理功能,以确保在生成后输出目录中不包含不相关的文件
  • 可以为任何类型的项目/语言创建模板
  • 案例转换过滤器,例如 camelCaseCamelCase

与 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:UpperCamelCase
  • camel_case:lowerCamelCase
  • snake_case:snake_case
  • kebab_case:kebab-case
  • shouty_snake_case:SHOUTY_SNAKE_CASE
  • title_case:Title Case
  • shouty_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