63 个版本 (41 个稳定版)
2.12.0 | 2023年12月10日 |
---|---|
2.11.4 | 2023年9月4日 |
2.10.3 | 2023年4月10日 |
2.9.0 | 2023年3月26日 |
0.6.0 | 2018年11月25日 |
#22 在 模板引擎 中
185KB
4.5K SLoC
ffizer
是一个 files 和 folders initializer / generator。它可以从模板(或模板的一部分)创建或更新项目的任何类型(或部分)。
关键词:文件生成器、项目模板、项目脚手架、快速入门、项目引导、项目骨架
特性
- 从单个(或多个)模板(或模板集合)中创建或更新文件和文件夹。
- 原生可执行文件(命令行界面)
- 通过在系统上下载单个独立文件进行安装(无需像
python
、ruby
、nodejs
、java
等那样的要求)。 - 以足够快的速度运行作为项目生成器。
- 以干运行模式运行(用于测试非常有用)。
- 通过在系统上下载单个独立文件进行安装(无需像
- Rust 库
- 可以被包含到其他工具中
- 模板编写
- 可用于任何文件和文件夹生成(不限于特定的生态系统)。
- 可以从简单的文件夹复制开始。
- 可以使用 Handlebars 模板语法来编写文件内容,并扩展了函数
- 用于转换字符串(toUpperCase、toLowerCase、Capitalize...)
- 通过 http get 获取内容(如从
gitignore.io
获取.gitignore
,从 spdx 获取许可证) - ...
- 可以替换文件和文件夹名称中的变量部分
- 可以由其他模板组成(作为层应用)
- 可以根据条件忽略文件/文件夹
- 可以将内容存储在文件夹的根目录下或子文件夹
template
下
- 模板托管
- 在本地文件夹中
- 在托管 Git 仓库(公共/私有,
github
/bitbucket
/gitlab
/ ...)上- 在仓库的根目录下
- 在仓库的子文件夹中
- 在任何版本(分支、标签、提交)中
欢迎提出建议 ;-)
有关替代方案的列表可在wiki上找到,请随意补充/纠正。
用法
安装
curl https://raw.githubusercontent.com/ffizer/ffizer/master/scripts/getLatest.sh | bash
或者从github releases下载您平台上的二进制文件,然后解压并将其放置在您的 PATH 中。
通过 homebrew (MacOs & Linux)
brew install ffizer/ffizer/ffizer-bin
ffizer upgrade
通过 cargo
# install pre-build binary via cargo-binstall
cargo binstall ffizer
# install from source
cargo install ffizer --force --features cli
运行
❯ ffizer --help
ffizer is a files and folders initializer / generator.
It creates or updates any kind (or part) of project from template(s)
Usage: ffizer [OPTIONS] <COMMAND>
Commands:
apply Apply a template into a target directory
inspect Inspect configuration, caches,... (wip)
show-json-schema Show the json schema of the .ffizer.yaml files
test-samples test a template against its samples
help Print this message or the help of the given subcommand(s)
Options:
-v, --verbose... Verbose mode (-v, -vv (very verbose / level debug), -vvv) print on stderr
-h, --help Print help information
-V, --version Print version information
https://ffizer.github.io/ffizer/book/
应用模板(以创建或更新)
❯ ffizer apply --help
Apply a template into a target directory
Usage: ffizer apply [OPTIONS] --source <URI> --destination <FOLDER>
Options:
--confirm <CONFIRM> ask for plan confirmation [default: Never] [possible values: auto, always, never]
--update-mode <UPDATE_MODE> mode to update existing file [default: Ask] [possible values: ask, keep, override, update-as-remote, current-as-local, show-diff, merge]
-y, --no-interaction should not ask for confirmation (to use default value, to apply plan, to override, to run script,...)
--offline in offline, only local templates or cached templates are used
-s, --source <URI> uri / path of the template
--rev <REV> git revision of the template [default: master]
--source-subfolder <FOLDER> path of the folder under the source uri to use for template
-d, --destination <FOLDER> destination folder (created if doesn't exist)
-v, --variables <KEY_VALUE> set variable's value from cli ("key=value")
-h, --help Print help information
-V, --version Print version information
-
使用本地文件夹作为模板
ffizer apply --source $HOME/my_templates/tmpl0 --destination my_project
-
使用远程 Git 仓库作为模板
ffizer apply --source https://github.com/ffizer/template_sample.git --destination my_project
输出
Configure variables ✔ project_name · my-project ✔ package_name · my_project Plan to execute - make dir my_project - make dir ├─dir_1 - add file │ └─file_1_1.txt - make dir ├─dir_2_my-project - add file │ └─file_1_2.txt - add file ├─file_1.txt - add file ├─file_2.txt - add file ├─file_3.txt - add file ├─file_4_my_project.txt - add file ├─file_5_my-project.txt - add file └─file_6.hbs
编写模板
从模板编写教程开始
少量模板
- 任何 Git 仓库(在这种情况下,ffizer 类似于
git clone ... && cd ... && rm -Rf .git
) - 任何本地文件夹(在这种情况下,ffizer 类似于
cp -R ... ...
) - 参数化(带变量)的模板
构建
cargo install cargo-make --force
cargo make ci-flow
更新 CHANGELOG.md
cargo make update-changelog
git add CHANGELOG.md
git commit -m ':memo: (CHANGELOG) update'
通过提升 patch
(或 minor
或 major
)发布新版本
cargo make publish patch # dry-run
cargo make publish --execute patch
依赖关系
~22–39MB
~637K SLoC