如果我在cookiecutter.json
中有这样的变量:
{
"app": {
"name": "myapp",
"description": "my app description",
"version": "v1",
"ecr_data_classification_tag": "non-pii"
},
"contact": {
"team": "monitors",
"name": "WS Monitors",
"url": "http://myurl.tld/"
},
"etc": "foo"
}
调用cookiecutter时,如何覆盖应用程序name
?
我试着提供";额外上下文";这边:
$ cookiecutter --no-input my-template app.name="my-new-name"
和:
$ cookiecutter --no-input my-template app='{"name":"my-new-name"}'
但前者什么也不做,后者只是用字符串{"name":"my-new-name"}
替换整个app
参数(它不解析JSON(。
我试着把整件事都转储到一个yaml文件中,这很有效:
default_context:
app:
name: my-new-name
但这并不理想。它还清除了所有其他app
参数。
有没有一种方法可以从命令行调用cookiecutter并只覆盖app.name
?
事实证明:
- 不;额外上下文";只是k/v对,根本不解析键和值
- 从2.1.1开始,当值被交换来覆盖配置时,整个值都被交换了,所以对于字典/对象,没有办法只替换值的一个属性,你必须替换整个值
cksak
更改了遍历字典,只交换指定的值,但这在main
中,尚未发布
因此,目前,如果您想覆盖字典值,您别无选择,只能创建一个单独的yaml(或json(文件并通过--config-file
加载该文件,并且在2.1.2发布之前,您必须确保覆盖每个字典的所有属性,除非您希望它们被删除。