7 个不稳定版本
0.5.0 | 2022 年 12 月 8 日 |
---|---|
0.4.1 | 2019 年 11 月 28 日 |
0.3.0 | 2019 年 11 月 27 日 |
0.2.2 | 2019 年 11 月 27 日 |
188 在 模板引擎 中排名
24 每月下载量
15KB
246 行
cpt
带模板的复制
复制文件夹结构,如果提供模板数据,则所有 .tpl
文件将使用 Handlebars 转换,并删除 .tpl
文件扩展名。
除非设置了 -f
或 --force
标志,否则不会覆盖现有文件。
可以以 dry
模式运行,这会跳过任何文件写入操作,但仍然记录将执行的操作。使用 -d
或 --dry
标志。
文件夹和文件名也支持 Handlebars 语法。虽然你无法在文件夹名中使用 \
和许多其他字符(因此受限)。将模板应用于文件/文件夹名后,\n
字符(由于它们无效)将特别处理。在每个换行处创建的文件夹结构将分支。它们的每个内容都将相同。
例如,使用以下数据
第二行将被序列化为 "file1.txt.tpl\nfile2.txt.tpl"。
{
"dir": "dir1\ndir2",
"file": ["file1.txt.tpl", "file2.txt.tpl"]
}
从这个文件夹
./
./bar.txt.tpl
./{{dir}}/{{file}}
./{{dir}}/non-template.txt
将生成以下输出文件和文件夹
./
./bar.txt
./dir1
./dir2
./dir1/non-template.txt
./dir2/non-template.txt
./dir1/file1.txt
./dir2/file1.txt
./dir1/file2.txt
./dir2/file2.txt
下载此存储库后,可以使用以下命令尝试(假设您已安装 Rust 和 Cargo)
cargo run ./templates/example_tpl_dir ./templates/example_to --json='{ \"file2\": \"bar\nbare\", \"dir\": \"dir1\ndir2\", \"file\": [\"file1.txt.tpl\", \"file2.txt.tpl\"] }'
安装
作为库
[dependencies]
cpt = "0.4.1"
作为命令行工具
cargo install cpt
用法
作为库
使用缩写
use cpt::cpt;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let from = String::from("./templates/example");
let to = String::from("./example_to");
let mut data = std::collections::HashMap::<String, String>::new();
data.insert("foo".to_string(), "bar".to_string());
cpt(from, to, data) // cp(from, to) to use without templating
}
使用构建器
use cpt::Cpt;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let from = String::from("./templates/example");
let to = String::from("./example_to");
let mut data = std::collections::HashMap::<String, String>::new();
data.insert("foo".to_string(), "bar".to_string());
Cpt::new(from, to)
.set_force(true)
.set_dry(false)
.set_data(data)
.execute()
}
作为命令行工具
cpt ./example ./exampletest --json='{ \"foo\": \"bar\" }'
使用帮助
cpt --help
cpt 0.4.1
AlexAegis
Copies one folder structure to another place with files. Also formats templates!
USAGE:
cpt.exe [FLAGS] [OPTIONS] <from> <to>
FLAGS:
-d, --dry If set, nothing will be written to the disk
-f, --force If set, files can be overwritten in the target folder
-h, --help Prints help information
-q, --quiet Tarpaulin
-V, --version Prints version information
OPTIONS:
-j, --json <json> JSON formatted templating data
ARGS:
<from> The folder that will be copied [default: .]
<to> The folder where the folder will be placed [default: ./target]
有效输入
序列化器仅支持字符串和数组。有效的 TypeScript 输入类型如下
interface Input {
[key: string]: string | string[];
}
动机
我为此创建了一个用于我的 Advent of Code 项目脚手架,您可以在我的 AoC 仓库 中找到。
接下来是什么?
为了让这个项目不仅仅是一个小小的玩具项目,下一步将实现上下文感知模板。如果我们把模板看作一棵树,其中叶子是文件的正文,而它们的父节点是文件名,那么给这些节点传递一些关于它们父节点和它们位置的信息会很好。
这将允许自动索引,例如。
使用的库
- Handlebars
模板引擎
- Walkdir
递归目录遍历器
- Clap
命令行参数解析器
- Serde
序列化器,反序列化器。在此用于JSON解析
依赖项
~4–12MB
~137K SLoC