Gatsby 中 GraphQL 查询中的 file 和 allFile 有什么区别?

What is the difference between file and allFile in the GraphQL query in Gatsby?

在我的 GraphiQL 浏览器中,我似乎可以查询 fileallFile,但我不太明白两者之间的区别。事实上,每个查询似乎都以这种方式“重复”。有人可以解释一下,或者给我指出一些解释差异的文档,以及我什么时候应该使用一个吗?

allFile(注意 all 前缀)代表 Gatsby 使用 gatsby-source-filesystem 推断出的 file 节点类型的所有 GraphQL 资产,而 file 是一个孤立的节点,需要过滤才能获得特定的对象。

换句话说,allFile 公开了项目中的所有文件(至少是 Gatsby 知道的那些文件),这将为您提供一个数组 nodesfile 仅指向特定的 GraphQL 节点。这个单一和孤立的节点通常需要被过滤以将它们放在其他节点中。 同样的推理适用于 allMdxmdxallSitesite

例如,使用 allMdx 示例(由 gatsby-plugin-mdx 创建的节点):假设您有一个博客项目,您将 post 存储在 MDX 文件中。在您的 gatsby-node.js 中,您将查询 allMdx 节点以获得所有 post,然后,您将遍历结果并为每个 post 创建动态页面(使用createPage 方法)。在 post 模板(每个特定 post 将使用的模板)中,您需要使用 mdx 而不是查询 allMdx,因为它专门指向一个mdx 节点。 当然,在你的模板中,你仍然可以使用 allMdx,因为它不是最佳的 GraphQL 节点,因为你有一个特定的 mdx 将是你的单个 post,由一些唯一值过滤像 slugid