Gatsby - 如何使用 GraphQL 查询 src/data/ 子文件夹中的所有 YAML

Posted

技术标签:

【中文标题】Gatsby - 如何使用 GraphQL 查询 src/data/ 子文件夹中的所有 YAML【英文标题】:Gatsby - How to query for all YAML in a subfolder of src/data/ using GraphQL 【发布时间】:2021-11-25 09:25:32 【问题描述】:

我正在尝试在我的数据文件夹的子文件夹中查询所有 YAML 文件。我正在使用gatsby-transformer-yaml 来解析 YAML 数据。我的文件树看起来像这样:

content/
    posts/
        book1.md
        book2.md
src/
    data/
        books/
            quotes1.yaml
            quotes2.yaml 
    templates/
        booknote.tsx

根据documentation,我应该能够进行一个名为allBooksYaml 的查询,它将返回quote1.yamlquote2.yaml 中的所有引号。但是,当我查看 GraphiQL 操场时,我可以进行的唯一查询是 allQuote1YamlallQuote2Yaml。 (1) 这是一个错误吗?还是我的设置有问题?

我想这样做的原因是,我可以过滤带有书名的allBooksYaml 的结果,并为使用booknote.tsx 模板生成的每个页面显示正确的引号。如果我不这样做,我想我将不得不为我想要创建的每个书注帖子手动进行单独的页面/GraphQL 查询。 (2) 有没有更好的方法来链接 YAML 文件和 Markdown/Page 组件中的数据?

提前致谢!

【问题讨论】:

【参考方案1】:

根据plugin's documentation,给出:

module.exports = 
  plugins: [
    `gatsby-transformer-yaml`,
    
      resolve: `gatsby-source-filesystem`,
      options: 
        path: `$__dirname/src/data/`,
      ,
    ,
  ],
 

源文件夹$__dirname/src/data/ 包含.yaml 文件。

请记住,您可以构建文件夹以生成数组或单个对象:

对象数组:每个文件代表一个集合。 (你可能想要这个) 单个对象:每个子文件夹代表一个集合;每个文件代表一个“记录”。

因此,如果您的路径是 ./src/data/books,您应该能够查询所有书籍,但这将为所有书籍(单个对象)生成一个特定节点。

对于第二个问题,我认为最好的最佳解决方案是使用gatsby-node.js 动态生成页面,在那里查询所有降价书籍,通过上下文将标题(或另一个唯一字段)发送到模板并在那里过滤每本书,因此您的报价将需要包含一个带有与该书匹配的标识符的字段,主要是您所说的,但没有手动方法。同时,这或多或少是一种博客方法。

进一步参考:https://www.gatsbyjs.com/docs/creating-and-modifying-pages/

【讨论】:

【参考方案2】:

您应该能够通过使用以下配置来做到这一点:

"gatsby-transformer-yaml",

  resolve: "gatsby-source-filesystem",
  options: 
    path: `$__dirname/src/data`,
  ,
,
"gatsby-transformer-yaml",

  resolve: "gatsby-source-filesystem",
  options: 
  path: `$__dirname/content`,
  ,
,

【讨论】:

以上是关于Gatsby - 如何使用 GraphQL 查询 src/data/ 子文件夹中的所有 YAML的主要内容,如果未能解决你的问题,请参考以下文章

Gatsby 和 GraphQL - 如何在查询中过滤数组

如何使用 gatsby-source-prismic 在 graphql 中执行嵌套查询

如何在带有 gatsby 的 graphql 查询中使用正则表达式

Gatsby - 如何使用 GraphQL 查询 src/data/ 子文件夹中的所有 YAML

Gatsby:在自定义帖子类型上使用 GraphQL 查询和自定义分类

GraphQL - Gatsby.js- React 组件。 - 如何查询变量/参数?