菜单

源插件

相关源文件

源插件是 Gatsby 数据层架构的基础组成部分。它们负责从外部系统获取数据,并将其转换为填充 Gatsby GraphQL 数据层的节点对象。本文档解释了源插件在 Gatsby 代码库中的工作方式、核心架构和实现模式。

有关数据源引入后处理数据转换插件的信息,请参阅转换插件。有关图像处理功能,请参阅图像处理

核心架构

源插件是外部数据源和 Gatsby 内部数据层之间的桥梁。它们实现了 Gatsby 在构建过程中调用的特定生命周期方法,其中 sourceNodes 是最重要的。

来源:packages/gatsby-source-contentful/src/gatsby-node.js45-81 packages/gatsby-source-contentful/src/source-nodes.js52-100

源插件生命周期

源插件在 Gatsby 构建过程中遵循特定的生命周期

  1. 插件初始化:初始化插件并验证插件选项
  2. 预引导:调用 onPreBootstrap,允许插件设置先决条件
  3. 模式自定义:调用 createSchemaCustomization 来定义 GraphQL 类型
  4. 源节点:调用 sourceNodes 来获取数据并创建节点
  5. 构建后:如有必要,执行清理操作

来源:packages/gatsby-source-contentful/src/gatsby-node.js46-81 packages/gatsby-source-contentful/src/source-nodes.js52-187

核心实现组件

源插件由几个协同工作的关键组件组成

插件选项和配置

每个源插件都接受与其连接的数据源相关的特定选项,例如 API 凭据、基本 URL 和过滤选项。

来源:packages/gatsby-source-contentful/src/plugin-options.js19-26 packages/gatsby-source-drupal/src/plugin-options.ts

数据获取

源插件实现专门的逻辑来从外部系统获取数据,处理身份验证、分页和错误情况。

来源:packages/gatsby-source-contentful/src/fetch.js236-374 packages/gatsby-source-contentful/src/fetch.js380-418

数据归一化

获取数据后,源插件将其转换为适合 Gatsby 节点系统的结构。这通常包括

  1. 为每个实体创建唯一 ID
  2. 解析实体之间的关系
  3. 在适用的情况下处理本地化
  4. 准备媒体/资产以供处理

来源:packages/gatsby-source-contentful/src/normalize.js68-82 packages/gatsby-source-contentful/src/normalize.js84-107 packages/gatsby-source-contentful/src/normalize.js131-240

节点创建

最后一步是使用 createNode 操作在 Gatsby 的数据层中创建节点。

来源:packages/gatsby-source-contentful/src/normalize.js409-597 packages/gatsby-source-contentful/src/normalize.js814-900

文件下载和媒体处理

许多源插件(如 Contentful 和 Drupal)处理媒体文件,这需要

  1. 检测源数据中的文件引用
  2. 使用 gatsby-source-filesystem 创建文件节点
  3. 建立内容节点和文件节点之间的关系

来源:packages/gatsby-source-contentful/src/download-contentful-assets.js29-102 packages/gatsby-source-drupal/src/normalize.ts26-142

示例:Contentful 源插件如何工作

让我们以 Contentful 源插件为例

来源:packages/gatsby-source-contentful/src/gatsby-node.js6-12 packages/gatsby-source-contentful/src/source-nodes.js52-106 packages/gatsby-source-contentful/src/create-schema-customization.js72-212

示例:Drupal 源插件如何工作

另一个例子是 Drupal 源插件

来源:packages/gatsby-source-drupal/src/gatsby-node.ts45-135 packages/gatsby-source-drupal/src/normalize.ts10-26

常见的源插件实现模式

在检查多个源插件时,我们可以识别出常见的模式

身份验证和连接管理

大多数源插件都需要处理与其数据源的身份验证

来源: packages/gatsby-source-contentful/src/fetch.js98-157

分页和数据量管理

当处理大型数据集时,源插件会实现分页策略

来源: packages/gatsby-source-contentful/src/fetch.js425-456

错误处理

强大的错误处理对源插件至关重要

来源: packages/gatsby-source-contentful/src/fetch.js160-228 packages/gatsby-source-contentful/src/source-nodes.js322-331

增量构建支持

现代源插件通过跟踪自上次构建以来发生的变化来支持增量构建

来源: packages/gatsby-source-contentful/src/source-nodes.js138-144 packages/gatsby-source-contentful/src/source-nodes.js187-189

插件选项模式

源插件通常为其选项定义一个模式,以验证用户配置

来源: packages/gatsby-source-contentful/src/gatsby-node.js83-182

结论

源插件是 Gatsby 数据层的关键组成部分,负责将外部数据源的数据拉取到 Gatsby 的 GraphQL 数据层中。它们遵循一致的提取、规范化和创建节点模式,同时处理身份验证、分页和错误管理等复杂问题。

通过了解源插件的工作原理,开发人员可以更有效地使用现有插件,并为独特的数据源创建自定义解决方案。