Jekyll YAML 循环引用

Jekyll YAML cyclic reference

我有一个包含两个页面的 jekyll 项目,每个页面都由相互引用的 YAML 映射支持。例如:

a: &a
  name: "Ay"
  parents: []
  children: [*b]

b: &b 
  name: "Bee"
  parents: [*a]
  children: []

Vanilla YAML 似乎不支持在定义之前使用 alias/anchor,这使该策略无效。有没有什么办法,也许使用 liquid-fu 可以让我生成枚举条目的父项和子项的页面?

您只需在第一次出现时给出值:

a: &a
  name: "Ay"
  parents: []
  children:
    - &b
      name: "Bee"
      parents: [*a]
      children: []
b: *b

alias/anchor 构造是专门为此 use-case 设计的。由于解析出来的YAML数据没有区分对象锚定的地方和引用的地方,所以这就相当于你想要的了。

正如上面问题的措辞,@flyx 的答案是最合适的,但是考虑到外部限制(参见 ) I ended writing my own plugin 让数据文件通过 liquid 在文本上相互包含。

这个插件的目标是让数据成为:

  1. DRY -(不要重复自己)每个模型应该只定义一次。
  2. 分组 - 所有类似的数据都应该以相同的格式彼此相邻定义。
  3. 分开 - 不同的数据应该在不同的地方定义。

@flyx 的解决方案未能实现目标 #2 和 #3,要求在同一位置定义所有不同类型的数据并混合食物和配料的定义。

我提出的解决方案允许将一个数据文件文本包含到另一个文件中。这允许在不同的文件中定义不同的模型,但从其他文件中引用它们就像它们以任意顺序在同一位置定义一样。应用于这个问题,我的解决方案是这样的:

A.yml

{% include_relative_once _data/B.yml %}

a: &a
  name: "Ay"
  parents: []
  children: [*b]

B.yml

{% include_relative_once _data/A.yml %}

b: &b 
  name: "Bee"
  parents: [*a]
  children: []

对于插件本身,请参阅此 gist