You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用yq识别MkDocs YAML配置中Search插件并注入默认配置?

解决MkDocs YAML配置中Search插件的检测与注入问题

问题背景

在流水线任务中,需要向MkDocs的YAML配置文件注入缺失的Search插件配置,但配置里的插件列表存在两种合法形式:

形式一(无参数简洁写法):

plugins:
  - search

形式二(带参数的完整写法):

plugins:
  - search:
      lang: en
      foo: bar

现有问题:使用yq的contains函数只能检测到形式一的配置,无法识别形式二;尝试通过模板合并的方式实现需求也遇到了阻碍。

解决方案

1. 检测Search插件是否存在

使用yq的any函数遍历插件数组,同时匹配两种形式的配置:

yq 'any(.plugins[]; . == "search" or has("search"))' mkdocs.yml
  • 逻辑说明:遍历plugins数组的每个元素,判断元素是否是字符串"search"(对应形式一),或者是包含search键的对象(对应形式二),任一条件满足则返回true,表示插件已存在。

2. 自动注入缺失的Search插件配置

直接执行以下命令,若检测到Search插件不存在,则自动添加形式二的配置到原文件:

yq 'if any(.plugins[]; . == "search" or has("search")) then . else .plugins += [{"search": {"lang": "en", "foo": "bar"}}] end' mkdocs.yml -i
  • 参数说明:
    • -i:直接修改原配置文件(若需预览修改效果,可去掉该参数,将结果输出到控制台查看)
    • 若原配置中没有plugins键,命令会自动创建该键并插入目标配置

版本说明

上述命令基于mikefarah/yq v4.x版本编写,若使用v3或其他分支版本,语法会有差异,建议升级到v4版本以获得最佳兼容性。

内容的提问来源于stack exchange,提问作者Karel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:07:22