GraphQL 查询访问位于子目录中的文件夹中的所有转换后的 json 文件

Cas*_*sey 3 graphql gatsby

我有一个像这样的项目结构:

-$PROJECT
--src
---data
----projects
-----project1
------project.json
------images
-------project1-preview.png
-----project2
------project.json
-------images
...
Run Code Online (Sandbox Code Playgroud)

等等,对于许多项目。我可以查询这些 project.json 文件,当它们被命名为项目的标题时,并且在projects使用allProjectsJsongraphQl的文件夹中时,但是现在它们位于projects. 我只能作为 allProject1Json 等单独查询它们。有没有办法查询 allProjectsJson 以便我获得所有 project.json 文件?

我可以通过查询allFilejson 文件的过滤器来找到我的项目文件,但是,这些文件未转换为 json,因此我无法访问这些元素。

在我的 gatsby-config 文件中,我将 src/data 作为文件源导入。

小智 5

从我在https://github.com/gatsbyjs/gatsby/issues/20734 的回答:

啊,我明白你的意思了 :) 幸运的是gatsby-transformer-json有一个插件选项可以帮助你摆脱困境!

这是typeName选项。您应该能够检查每个 JSON 节点上的字段,并将其用作类型名称。像这样的东西:

    {
      resolve: `gatsby-transformer-json`,
      options: {
        typeName: ({ node, object, isArray }) =>
          object.project ? `Project` : `Json`,
      },
    },
Run Code Online (Sandbox Code Playgroud)

这样,project定义字段的任何内容都将显示为allProject { ... },而任何其他 json 文件将显示为allJson { ... }

{
  allProject {
    nodes {
      project
    }
  }
}
Run Code Online (Sandbox Code Playgroud)
{
  "data": {
    "allProject": {
      "nodes": [
        {
          "project": "project1"
        },
        {
          "project": "project2"
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)