我有一个包含一些项目配置的 YAML 文件,我希望重用部分代码以使其易于维护。所以,我尝试使用 anchor 来做到这一点,但我想覆盖以前的节点。这可能吗?
下面是我的例子:
default: &default
output: &default_output
make_video: true
take_screenshot: true
browser: &default_browser
type: :chrome
width: 1024
height: 1280
logger: &default_logger
level: TRACE
output_type: :file
chrome_browser: &chrome_browser
<<: *default
browser:
type: :chrome
user_agent: user_agent_string_for_chrome
firefox_browser: &firefox_browser
<<: *default
browser:
type: :firefox
user_agent: user_agent_string_for_firefox
好的,这是第一部分:这可能吗? firefox_browser 会覆盖“类型”吗?
现在是第二部分:
profile:
<<: *default
staging:
europe:
url: www.staging-europe-site.com
chrome:
<<: *browser_chrome
firefox:
<<: *browser_firefox
america:
url: www.staging-america-site.com
chrome:
<<: &browser_chrome
firefox:
<<: &browser_firefox
live:
europe:
url: www.europe-site.com
chrome:
<<: &browser_chrome
firefox:
<<: &browser_firefox
america:
url: www.america-site.com
chrome:
<<: &browser_chrome
firefox:
<<: &browser_firefox
我可以做这样的事情,以便在阅读 yaml 之后,我可以:
profile_yaml['staging.europe.chrome']
我得到了所有的配置?
最佳答案
至于您的第一个问题,这并没有满足您的要求,因为键 browser
的值(来自 default
)被替换为 中定义的值>chrome_browser
。没有树合并或类似的事情发生。
所以对于你的第二个例子,你最终得到:
output:
make_video: true
take_screenshot: true
logger:
level: TRACE
output_type: :file
browser:
type: :chrome
user_agent: user_agent_string_for_chrome
如果您将其转储回 YAML,这可能也缺少。当然还有其他方法可以实现这些目标,但您必须帮助解析器这样做。
关于parsing - 覆盖 YAML 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23111733/