#目录结构 #文件夹 #模板化 #模板 #文件 #复制 #填充

bin+lib cpt

一个文件系统工具,用于复制文件夹结构。如果遇到任何 .tpl 文件并提供模板数据,它会尝试使用 Handlebar 语法进行填充,并打印出转换后的版本。

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 每月下载量

MIT 许可证

15KB
246

cpt

Rust CI Crates.io Docs.rs Codacy Badge Coverage Status

带模板的复制

复制文件夹结构,如果提供模板数据,则所有 .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 仓库 中找到。

接下来是什么?

为了让这个项目不仅仅是一个小小的玩具项目,下一步将实现上下文感知模板。如果我们把模板看作一棵树,其中叶子是文件的正文,而它们的父节点是文件名,那么给这些节点传递一些关于它们父节点和它们位置的信息会很好。

这将允许自动索引,例如。

使用的库

依赖项

~4–12MB
~137K SLoC