本页面解释了 Gatsby 的基本概念,包括其架构、数据模型、构建过程和渲染策略。有关仓库结构的信息,请参见仓库结构。有关插件生态系统的详细信息,请参见插件生态系统。
Gatsby 是一个现代的 Web 框架,它结合了 React、GraphQL 和 webpack 的最佳部分,以创建具有动态功能的静态站点。其核心是,Gatsby 遵循独特的架构,处理来自各种来源的数据,将其转换为统一的数据层,并生成优化的静态资产。
来源:packages/gatsby/index.d.ts1-247 packages/gatsby/src/redux/types.ts1-170 packages/gatsby/src/commands/build.ts1-100
Gatsby 的数据层是一个强大的抽象,它将来自各种来源的数据整合到一个统一的 GraphQL API 中。这个数据层是 Gatsby 构建页面以及实现从站点任何位置查询数据的核心。
Gatsby 数据层的基础是节点模型。“节点”是 Gatsby 中数据的基本单位,代表着从博客文章到图片再到站点元数据的一切。
节点的主要特征
contentDigest 属性使 Gatsby 能够高效地跟踪更改来源:packages/gatsby/index.d.ts147-162 packages/gatsby/src/redux/types.ts147-162 packages/gatsby/src/redux/actions/public.js596-713
Gatsby 内部使用 Redux 来管理构建过程的状态。这个状态存储包含构建过程中使用的所有节点、页面和其他重要数据。
Gatsby 中的 Redux 存储包括
来源:packages/gatsby/src/redux/index.ts1-120 packages/gatsby/src/redux/types.ts279-449 packages/gatsby/src/redux/persist.ts1-44
Gatsby 的 GraphQL 层位于节点模型之上,提供了一种查询语言来访问您的数据。在构建过程中,Gatsby 根据您的数据创建 GraphQL 模式,并使其可用于查询。
Gatsby 中的主要 GraphQL 概念
来源:packages/gatsby/index.d.ts315-328 packages/gatsby/src/query/query-runner.ts1-93 packages/gatsby/src/redux/types.ts366-379
Gatsby 支持多种页面生成策略,允许开发者根据每个页面的需求选择合适的方法。
Gatsby 支持三种主要的页面生成模式
静态站点生成(SSG):默认模式。页面在构建时预渲染为 HTML。
延迟静态生成(DSG):页面在首次请求时构建,然后为后续访问者缓存。
createPage() 中设置为 defer: true服务器端渲染(SSR):页面在每次请求时渲染。
getServerData() 函数启用来源:packages/gatsby/src/redux/types.ts43-69 packages/gatsby/src/redux/actions/public.js140-204 packages/gatsby/src/utils/page-mode.ts
Gatsby 的构建过程将您的代码和数据转换为优化的静态站点。了解此过程有助于您优化站点的性能和开发工作流程。
构建过程包括以下主要阶段
来源:packages/gatsby/src/commands/build.ts72-175 packages/gatsby/src/services/initialize.ts76-147 packages/gatsby/src/commands/build-html.ts30-211
在构建过程中,Gatsby 执行 GraphQL 查询以填充页面数据
查询执行的关键方面
来源:packages/gatsby/src/query/query-runner.ts93-222 packages/gatsby/src/utils/page-data.ts100-167 packages/gatsby/src/commands/build.ts286-350
构建过程完成后,Gatsby 生成一个在浏览器中运行的 React 应用程序,以提供交互性和客户端导航。
客户端运行时的关键组件
来源:packages/gatsby/cache-dir/production-app.js1-143 packages/gatsby/cache-dir/loader.js1-165 packages/gatsby/cache-dir/app.js1-207
Gatsby 提供了一套丰富的 API 和扩展点,用于自定义构建过程和运行时行为。
节点 API 允许您连接到 Gatsby 的服务器端构建过程
| API | 目的 | 执行计时 |
|---|---|---|
onPreBootstrap | 引导过程前的设置 | 构建开始时 |
sourceNodes | 从外部数据创建节点 | 数据源阶段 |
onCreateNode | 转换节点或创建关系 | 每个节点创建后 |
createSchemaCustomization | 定制 GraphQL 模式 | 模式生成前 |
createPages | 从数据创建页面 | 数据源后 |
onCreatePage | 修改插件创建的页面 | 每个页面创建后 |
onCreateWebpackConfig | 修改 webpack 配置 | webpack 编译前 |
onPostBuild | 构建完成后的最终操作 | 构建结束时 |
浏览器 API 允许您自定义 Gatsby 的客户端运行时
| API | 目的 | 执行计时 |
|---|---|---|
onClientEntry | 客户端加载时运行代码 | 客户端加载开始时 |
onRouteUpdate | 在路由更改时运行代码 | 导航后 |
onServiceWorkerInstalled | 处理 Service Worker 事件 | Service Worker 安装后 |
wrapPageElement | 用组件包装页面 | 渲染期间 |
wrapRootElement | 包装根元素 | 渲染期间 |
来源:packages/gatsby/index.d.ts402-733 packages/gatsby/index.d.ts743-801
Gatsby 页面是 React 组件,可以选择包含在构建过程中获取数据的 GraphQL 查询。
页面组件的关键概念
Head 导出的特殊组件,用于定义文档头部内容页面结构示例
来源:packages/gatsby/index.d.ts70-107 packages/gatsby/index.d.ts175-203 packages/gatsby/index.d.ts243-268
Gatsby 在开发和生产环境中具有不同的行为
| 功能 | 开发 | 生产 |
|---|---|---|
| 页面生成 | 按需 | 全部在构建时 |
| 服务器 | 本地开发服务器 | 静态文件服务器 |
| 热重载 | 已启用 | 不适用 |
| GraphQL IDE | 在 /__graphql 可用 | 不可用 |
| 构建优化 | 最小 | 完全优化 |
| 页面模式 | 所有 SSG 以提高速度 | 基于配置的 SSG、DSG 或 SSR |
| 错误覆盖 | 交互式与源映射 | 不可用 |
开发服务器提供多项功能以增强开发体验
来源:packages/gatsby/src/utils/start-server.ts67-145 packages/gatsby/src/commands/develop-process.ts1-152 packages/gatsby/cache-dir/app.js70-206
Gatsby 的核心概念围绕着强大的数据层、灵活的页面生成策略以及基于 React 的组件系统。该框架结合了静态站点生成的最佳特性和动态功能,在提供卓越性能的同时保持了开发人员的体验。
通过理解这些核心概念,您将能够有效地使用 Gatsby 来处理各种 Web 项目,从简单的博客到复杂的应用程序。
来源:packages/gatsby/index.d.ts packages/gatsby/src/redux/types.ts packages/gatsby/src/commands/build.ts packages/gatsby/cache-dir/production-app.js