如何通过命令行覆盖Cookiecutter中的字典变量app.name?
Cookiecutter原生不支持直接通过app.name="xxx"这种点语法在命令行传递嵌套参数,但有两种可靠的命令行方式实现仅覆盖app.name,同时保留app下的其他默认值:
方法一:使用环境变量传递嵌套参数
Cookiecutter支持通过环境变量传递上下文,嵌套层级用**双下划线__**分隔:
# 一次性执行,无需提前导出环境变量 COOKIECUTTER_APP__NAME="my-new-name" cookiecutter --no-input my-template
这种方式只会覆盖app.name的值,app下的description、version等其他参数会保留cookiecutter.json中的默认配置。
方法二:使用--config-file结合临时配置文件
创建一个仅包含要修改的嵌套参数的配置文件(比如命名为override_config.yaml):
default_context: app: name: my-new-name
然后用--config-file参数指定该文件调用Cookiecutter:
cookiecutter --no-input --config-file override_config.yaml my-template
这里的核心是--config-file会将配置文件中的default_context与模板的cookiecutter.json进行深度合并,而非直接替换整个app对象,因此app下的其他参数会保留默认值。你之前遇到的“清除其他参数”问题,大概率是误用了--extra-context @file.yaml(该参数会直接替换上下文对象),而非--config-file。
内容的提问来源于stack exchange,提问作者Jun-Dai Bates-Kobashigawa
相关产品推荐
相关产品推荐

