allFile
(注意前缀all
)表示 Gatsby 使用gatsby-source-filesystem
推断出的所有 file
节点类型的 GraphQL 资源,而 file
则是需要过滤以获取特定对象的隔离节点。
换句话说,allFile
暴露了项目中的所有文件(至少是 Gatsby 知道的那些文件),这将给您提供一个包含节点的数组,而 file
仅指向特定的 GraphQL 节点。通常需要过滤这个单独的和孤立的节点才能从其余节点中获取它们。
同样的逻辑也适用于 allMdx
和 mdx
、allSite
和 site
等。
例如,使用 allMdx
示例(由gatsby-plugin-mdx
创建的节点):假设您有一个博客项目,在其中将帖子存储在 MDX 文件中。在您的 gatsby-node.js
中,您将查询 allMdx
节点以获取所有帖子,然后遍历结果并为每个帖子创建动态页面(使用 createPage
方法)。在帖子模板中(每个特定帖子将使用的模板),您将需要使用 mdx
而不是查询 allMdx
,因为它具体指向单个 mdx
节点。
当然,在您的模板中,仍然可以使用 allMdx
,但它不是最佳的 GraphQL 节点,因为您有一个具体的 mdx
,将是您的单个帖子,并通过一些唯一值(如slug
、id
等)进行过滤。