#template #generator #skeleton #project #file-content #git-repository

bin+lib ffizer

ffizer 是一个文件和文件夹初始化器/生成器。它可以从模板(或模板的一部分)创建或更新项目的任何类型(或部分)。

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模板引擎

CC0 许可

185KB
4.5K SLoC

ffizer

crates license crate version

Project Status: Active – The project has reached a stable, usable state and is being actively developed. Actions Status test coverage

crates download GitHub All Releases

ffizer 是一个 files 和 folders initializer / generator。它可以从模板(或模板的一部分)创建或更新项目的任何类型(或部分)。

关键词:文件生成器、项目模板、项目脚手架、快速入门、项目引导、项目骨架

asciicast: ffizer demo

特性

  • 从单个(或多个)模板(或模板集合)中创建或更新文件和文件夹。
  • 原生可执行文件(命令行界面)
    • 通过在系统上下载单个独立文件进行安装(无需像 pythonrubynodejsjava 等那样的要求)。
    • 以足够快的速度运行作为项目生成器。
    • 以干运行模式运行(用于测试非常有用)。
  • 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
    

编写模板

模板编写教程开始

少量模板

构建

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(或 minormajor)发布新版本

cargo make publish patch # dry-run
cargo make publish --execute patch

依赖关系

~22–39MB
~637K SLoC