11ty/eleventy中yaml文件的数据

Jay*_*Jay 6 javascript yaml eleventy

在我的 11ty 网站(skeleventy-starter)上,我想解析数百条评论。这些评论作为单独的 yaml 文件(命名如下:“entry-7128372832.yml”)存储在我的数据文件夹中名为 Reviews 的文件夹中。每个 yaml 文件如下所示:

_id: 84494a00-b086-11ea-94d5-7f955bef1b4e
rating: 5
name: Name
review: "review body"
date: "2019-05-12T12:12:31.116Z"
Run Code Online (Sandbox Code Playgroud)

我将自定义数据文件格式添加到 11ty 配置中,如文档中所述:

const yaml = require("js-yaml");

module.exports = (eleventyConfig) => {
  
// Yaml
 eleventyConfig.addDataExtension("yaml", (contents) =>
        yaml.safeLoad(contents)
 );
};
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试循环 .njk 文件中的评论数据时:

{% for review in reviews %}
    <p>{{ review.name }}</p>
    <p>{{ review.rating }}</p>
    <p>{{ review.review }}</p>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

我似乎既无法访问数据,也无法在控制台中收到错误。我在这里缺少什么?任何帮助表示赞赏。谢谢!

sh7*_*h78 4

您需要更改所有_data/entry-*.yml文件的文件扩展名才能使用该.yaml扩展名(请注意附加的a)。

YAML 团队推荐的官方文件扩展名是.yaml;然而,.yml在野外也很常见(请参阅此问题以快速了解)。

自定义数据文件格式文档中 YAML 支持的代码示例是为了支持官方.yaml扩展而编写的。

在 11ty 配置的这一行中,"yaml"表示要支持的文字文件扩展名,而不仅仅是语言的通俗名称:

eleventyConfig.addDataExtension("yaml", (contents) =>
Run Code Online (Sandbox Code Playgroud)

如果您想公开目录中的.yml.yaml文件_data/,则可以使用以下方法:

eleventyConfig.addDataExtension('yaml', contents => yaml.safeLoad(contents))
eleventyConfig.addDataExtension('yml', contents => yaml.safeLoad(contents))
Run Code Online (Sandbox Code Playgroud)

请注意,上述代码的顺序会影响11ty Data Cascade.yaml如果 a和文件之间存在优先级冲突.yml.yml则会获胜,因为扩展名是稍后添加的。

同样重要的是:11ty最近刚刚在v0.10.0中添加了 YAML 支持,因此请确保您使用的是 0.10.0 或更高版本。

  • “默认 YAML 支持”是什么意思?Eleventy [文档](https://www.11ty.dev/docs/data-custom/#yaml) 仍然写了有关使用 `require("js-yaml")` 和 `addDataExtension` 的内容。 (2认同)