如何在 markdown frontmatter 中创建字符串列表?

Posted

技术标签:

【中文标题】如何在 markdown frontmatter 中创建字符串列表?【英文标题】:How to create list of strings in markdown frontmatter? 【发布时间】:2019-10-28 00:56:28 【问题描述】:

我正在尝试使用 gatsbyjs 和 graphql 从 markdown frontmatter 中以列表形式检索数据。鉴于降价文件中的列表,目标是将列表项提取到我的反应组件中以供进一步使用。

这是我的工作,我想使用 GatsbyJS 和 React 创建一个网站(这就是我不能分享真实代码的原因)。 到目前为止,我尝试通过 GraphQL 从 frontmatter 中简单地获取数据,但该字段未定义或仅包含 null 值。

我有这样的前题:

---
name: "someName"
expertise: "someExpertise"
...
technologies: 
- tech1
- tech2
- tech3
---

在我的 js 代码中,我尝试使用 graphql 获取数据,如下所示:

query($slug: String!) 
    profile: markdownRemark(fields:  slug:  eq: $slug  ) 
      html
      frontmatter 
        date(formatString: "DD MMMM, YYYY")
        author
        expertise
        name
        dev_type
        degree 
        technologies
      
    

我希望输出匹配这样的形式:

technologies = ["tech1", "tech2", "tech3"]

但在开发环境中尝试编译和运行站点时出现以下错误:

案例 1。

Errors:
  Int cannot represent non-integer value: "tech1"

我不知道如何解决这个问题。据我了解,这应该有效。已经尝试在gatsby-node.js 中创建名为technologies 的新NodeField,但这也不起作用。

我还根据这个frontmatter想到了另一件事,在我的理解frontmatter是一个YAML,或者更确切地说,markdown文件中所需的技术列表是一个YAML列表,不是吗? 在这种情况下,我应该在gatsby-config.js 中调整/扩展gatsby-transformer-yaml 插件,但我不知道如何以正确/正确的方式实现这一点。

案例 2。

不幸的是,我无法再重现我的查询,但我找到了一种方法,我没有收到类型错误,但是 technologies 只包含 null 值(具有相同的 frontmatter 内容)。

technologies = [ null, null, null, ...]

【问题讨论】:

technologies: ["tech1", "tech2", "tech3"] 呢? 谢谢,显然这就是我用案例 2 中描述的结果查询的方式。 你运行的是哪个版本的 gatsby? 欢迎来到Stack Overflow。请忽略细节(谢谢等)和所有其他分散注意力的东西(根据tour)。另外:在句子中间使用“i”已经够糟糕了(在我的非母语人士眼中),如果不是在一个句子中一致使用,那就更糟了:请让你的读者容易理解。 【参考方案1】:

发现technologies: [ tech1, tech2, tech3 ] 是这个问题的解决方案。实际问题是我的降价文件中提供的数据不一致。

【讨论】:

以上是关于如何在 markdown frontmatter 中创建字符串列表?的主要内容,如果未能解决你的问题,请参考以下文章

Gatsby 如何使用 GraphQL 提供 Markdown frontmatter?

在 markdown 文件中编辑 YAML Frontmatter

GraphQL 忽略了一些(但不是全部)任意分配的 markdown frontmatter 数据

如何在 Gatsby 中将多个 yaml 文件映射到 frontmatter

IntelliJ IDEA 2022.2 Beta 2 发布

使用 Gatsby 的 Markdown 帖子中的特色图像的绝对路径