6 个版本
0.5.1 | 2024 年 4 月 1 日 |
---|---|
0.5.0 | 2024 年 3 月 14 日 |
0.4.1 | 2024 年 2 月 24 日 |
0.4.0 | 2024 年 1 月 21 日 |
0.3.1 | 2024 年 1 月 8 日 |
在 命令行工具 中排名第 281
65KB
1.5K SLoC
Proplate 🛠⚙
每次开始使用相同技术的新项目时,放弃设置环境;相反,创建一个模板并用于所有即将到来的项目。
目录
安装
先决条件: git
GitHub 发布
您可以从 发布页面 下载。
我建议在您的终端中全局可用。 (wip: install.sh)
Cargo
如果您已安装 cargo
cargo install proplate
cargo 将直接在您的 $PATH 中提供
使用模板创建项目
proplate create --template <location> --dest <output_dir>
location
可以是 GitHub 仓库或本地目录
为了测试目的,我将留下此模板 https://github.com/YumeT023/proplate-simple-npm-template
运行以下命令从上述模板开始您的项目
proplate create --template https://github.com/YumeT023/proplate-simple-npm-template --dest your-project-name
注意:如果您希望 proplate 为您初始化一个 git 仓库,请添加 --git
此时,... 与 Proplate 交流:D
创建自己的模板
参考
- Proplate 模板是一个包含
meta.json
的目录
通过实践学习
示例模板可以在 https://github.com/YumeT023/proplate/tree/master/examples/learn-by-doing 找到
最小的模板配置
最小的配置如下
{
"id": "initial-template",
"args": []
}
参数
那么 "args"
是什么意思?
Proplate 使用它们在模板初始化期间创建交互式提示。
您可以使用 Proplate 获取两种输入类型: Select
和 Text
。
"args": [
{
"key": "project_name",
"q_type": "Text",
"label": "Enter your project name"
}
]
文本输入渲染如下
让我们尝试为许可证添加一些 options
的选择输入
"args": [
{
"key": "project_name",
"q_type": "Text",
"label": "Enter your project name"
},
{
"key": "license",
"q_type": "Select",
"label": "Select a license for your project",
"options": ["MIT", "BSD-2-Clause", "none"]
}
]
选择输入渲染如下
... 但现在... 是什么? args
是什么:( ?
上下文绑定
args 或 context 用于替换特定文件中的变量绑定,这些文件被称为 dynamic files
如何编写动态文件?
... 非常简单:$var_name,在我们的例子中 $license
和 $project_name
让我们添加一个 README.md 动态文件,如下所示
README.md
# $project_name
licensed under $license
运行 proplate
proplate create --template learn-by-doing --dest dynamic-uh
让我们打开输出 dynamic-uh/README.md
...
我们真的做到了 ✨
如何让 proplate 知道我想以原样写入 $not-binding
?
只需转义它们 -uh
README.md
# $project_name
licensed under $license
hey proplate, leave this one \$not-binding
我的意思是...
你可以创建任意多的文件并添加绑定,Proplate 会处理它们
附加操作
有时,你想要做的不仅仅是替换动态文件。Proplate 已经为你准备好了。
目前,proplate 支持 2 个基本的 fs
操作:Remove
、Copy
、CopyDir
这些操作在 "additional_operations"
下枚举
... 假设我们只想无理由地删除某些东西
将文件 SIMPLY_DELETE 添加到你的模板目录中。
{
"additional_operations": [
{
"operations": [
{
"Remove": {
"files": ["SIMPLY_DELETE"]
}
}
]
}
]
}
你可以在 "operations"
下添加任意多的操作
... 但是等等,"additional_operations"
有点奇怪... 为什么不直接省略 SIMPLY_DELETE 文件呢?
当有条件地执行时,删除和复制变得更加实用... Proplate 可以做到这一点!!
让我们稍微修改一下模板
将 MIT
添加到 ".proplate_aux_utils"
目录中(默认情况下,此目录会被忽略 更多信息
MIT
添加 $author 绑定;)
MIT License
Copyright (c) 2024 $author
...
现在,只有当选择 MIT 许可证时,才将 MIT 复制到 LICENSE 文件中
{
"args": [
{
"key": "author",
"q_type": "Text",
"label": "Who is da author"
}
...
],
"additional_operations": [
{
"conditions": [
{
"lhs": "$license",
"op": "Eq",
"rhs": "MIT"
}
],
"operations": [
{
"Copy": {
"file": ".proplate_aux_utils/MIT",
"dest": "LICENSE"
}
}
]
}
...
]
}
proplate create --template learn-by-doing --dest additional-op-uh
支持的条件操作有:Eq
、NotEq
- 你可能会说 -
我们不能直接运行一些 bash 脚本-uh?... 为了你的安全,不
一些额外功能
-
"dynamic_files"
:如果你不包含此属性,proplate 将将模板文件视为动态。-
对于较大的模板,你可能希望明确指定哪些文件是动态的。你可以在
"dynamic_files"
属性下枚举,如下所示,你可以枚举 "files" 或 "directories"。然而,此时,其余的文件/目录变为静态{ "dynamic_files": ["package.json", "directory"] ... }
-
-
"exclude"
:我之前告诉你,".proplate_aux_utils"
默认情况下(辅助)会被忽略,这意味着它不会被直接包含在模板中。但也许在稍后的 "additional_operations" 期间-
你还可以在
"exclude"
下添加自己的辅助目录/文件。注意:
"meta.json"
和".proplate_aux_utils"
已预先排除{ "exclude": [".git", "node_modules"] ... }
-
-
"args"
:类型为Text
的输入可能具有 "default_value" 属性,proplate 将将其用作占位符 -
"additional_op"
操作列表- 复制 { 文件, 目标 }
- 复制目录 { 路径, 目标 }
- 删除 { 文件 }
依赖关系
~7–20MB
~208K SLoC