返回项目目录
前端框架精选项目

Gatsby

基于 React 和 GraphQL 数据层、面向内容网站的静态与混合渲染框架。

主要语言TypeScript
开源许可MIT
项目类型前端框架
维护状态活跃维护
OVERVIEW

项目概述

Gatsby 通过 Source Plugin 汇集文件系统、CMS 和 API 数据,再用 React、GraphQL 和逐页渲染策略生成高性能网站,并提供成熟的图片与插件体系。

Gatsby 是采用 MIT 许可证、建立在 React 之上的内容型 Web 框架。它通过 Source Plugin 将文件、Markdown、Headless CMS、数据库与 API 转换成统一的 Node 数据图,并自动生成可由 Page Query、useStaticQuery 和构建 API 使用的 GraphQL Schema。页面默认采用静态生成,也可以逐页选择 Deferred Static Generation 或 Server-Side Rendering;配合 Gatsby Image、文件路由、Head API 和插件生态,适合数据来源多、图片丰富且强调交付性能的内容网站。

核心 UIReact
数据层GraphQL
默认输出目录public
FEATURES

主要特点

Gatsby 将 React 页面、统一 GraphQL 数据层、构建插件和图片优化组合成面向内容交付的完整工作流。

01

React 页面与组件

使用 React 构建布局和交互,页面可通过 src/pages 文件路由创建,也能在 gatsby-node 中根据数据批量生成。

02

统一 GraphQL 数据层

Source Plugin 将不同数据源转为 Node,Gatsby 自动推断 Schema,让页面以统一查询访问内容、关系和图片。

03

丰富的 Source Plugin

可接入文件系统、Markdown、WordPress、Contentful、Shopify 等来源,也能通过 Node API 编写自定义数据插件。

04

多种渲染策略

页面可选择构建时 SSG、首次请求生成的 DSG、每次请求执行的 SSR,或在浏览器中运行的客户端路由。

05

Gatsby Image

StaticImage 和 GatsbyImage 可生成响应式尺寸、WebP/AVIF、占位图和懒加载,并提前保留比例减少布局偏移。

06

插件与构建 API

插件可参与数据获取、Schema、页面生成、HTML 与浏览器生命周期,并集成 Sitemap、样式、分析和离线能力。

07

Head API 与路由能力

页面可导出 Head 设置标题、Meta 和结构化数据,文件路由 API 则支持动态参数和 Collection Route。

08

缓存与增量构建

构建缓存、内容依赖跟踪和增量构建能减少后续发布工作量,尤其适合 CMS 驱动的持续更新。

USE CASES

适用场景

适合内容来自多个 CMS 或文件源、需要静态优先性能,并希望在少数页面使用 DSG 或 SSR 的 React 网站。

Headless CMS 网站

GraphQL 数据层和 Source Plugin 适合将 CMS 内容、媒体与本地数据统一到 React 页面。

品牌与营销网站

静态优先、图片优化、SEO 和可复用组件适合高流量活动、企业官网和产品介绍。

内容出版平台

Markdown/CMS、页面模板、分类分页和 Feed 插件可支撑博客、杂志与多作者内容。

电商内容前台

商品数据、CMS 营销内容和图片可在构建期整合,库存与购物车则通过客户端 API 或 SSR 更新。

大型文档与知识站

程序化页面、MDX、搜索索引和版本化数据源适合组件文档、帮助中心与知识库。

多数据源门户

不同 API、文件与 SaaS 数据可转换为统一 Schema,减少页面组件对各后端格式的直接依赖。

EVALUATION

优点与注意事项

技术选型不仅要看能力,也要理解它带来的团队成本。

主要优点

Gatsby 擅长的地方

  • React 组件模型成熟,交互界面和内容模板可以统一开发
  • GraphQL 数据层能规范多个 CMS、文件和 API 的访问方式
  • Source Plugin 与网站功能插件生态覆盖大量常见集成
  • Gatsby Image 提供完整的构建期响应式图片优化
  • SSG、DSG 与 SSR 可按页面选择,兼顾构建成本和内容新鲜度
  • 静态页面可部署到 CDN,并保持良好的首屏与 SEO 基础

需要注意

采用前应考虑的问题

GraphQL 增加学习与调试成本

简单数据也会经过 Node 和 Schema;大型项目应定义类型并使用 GraphiQL 检查查询,避免自动推断随内容变化。

首次构建可能较重

大量页面、远程内容和图片会增加内存与构建时间,应保留缓存、限制图片变体并评估 DSG 或分站策略。

插件兼容性需要核查

第三方插件可能滞后于 Gatsby、React 或 Node.js 版本,升级前应检查维护状态、Peer Dependency 和构建日志。

浏览器 JavaScript 成本

静态 HTML 通常会由 React Hydration 接管,组件和依赖过多会扩大 Bundle;纯内容区域应减少客户端逻辑。

混合渲染依赖托管能力

纯 SSG 可部署到任意静态平台,但 DSG、SSR、重写和函数要求托管适配器或兼容运行环境。

数据更新与预览需要设计

构建期数据不会自动实时更新,应为 CMS Webhook、预览、缓存失效和发布失败建立明确流程。

QUICK START

快速开始

用官方初始化器创建 TypeScript 项目,接入本地 Markdown,查询 GraphQL 数据并生成首页与生产文件。

1创建 TypeScript Gatsby 项目
bash
npm init gatsby my-gatsby-site -- -ts
cd my-gatsby-site
npm run develop

# 本地网站:http://localhost:8000
# GraphiQL:http://localhost:8000/___graphql
2安装 Markdown 数据插件
bash
npm install gatsby-source-filesystem gatsby-transformer-remark
3配置内容数据源
typescript
// gatsby-config.ts
import type { GatsbyConfig } from "gatsby";

const config: GatsbyConfig = {
  siteMetadata: {
    title: "开源项目志",
    siteUrl: "https://example.org",
  },
  plugins: [
    {
      resolve: "gatsby-source-filesystem",
      options: {
        name: "posts",
        path: "./content/posts",
      },
    },
    "gatsby-transformer-remark",
  ],
};

export default config;
4添加第一篇 Markdown 内容
markdown
---
title: "Hello Gatsby"
date: "2026-07-24"
description: "使用 React 和 GraphQL 构建内容网站"
---

Gatsby 会把 Markdown 转换为 GraphQL Node,
页面可以在构建时查询并渲染这些内容。
5查询数据并渲染首页
tsx
// src/pages/index.tsx
import * as React from "react";
import { graphql, type HeadFC, type PageProps } from "gatsby";

type Data = {
  allMarkdownRemark: {
    nodes: Array<{
      id: string;
      frontmatter: {
        title: string;
        date: string;
        description: string;
      };
    }>;
  };
};

export default function IndexPage({ data }: PageProps<Data>) {
  return (
    <main>
      <h1>开源项目志</h1>
      {data.allMarkdownRemark.nodes.map(({ id, frontmatter }) => (
        <article key={id}>
          <h2>{frontmatter.title}</h2>
          <p>{frontmatter.description}</p>
          <time>{frontmatter.date}</time>
        </article>
      ))}
    </main>
  );
}

export const query = graphql`
  query HomePage {
    allMarkdownRemark(sort: { frontmatter: { date: DESC } }) {
      nodes {
        id
        frontmatter {
          title
          date(formatString: "YYYY-MM-DD")
          description
        }
      }
    }
  }
`;

export const Head: HeadFC = () => <title>开源项目志</title>;
6检查并构建生产网站
bash
npm run build
npm run serve

# 静态构建结果位于 public 目录

下一步:对长期维护的项目,应显式定义关键 GraphQL 类型,固定 Gatsby 与插件版本,并在 CI 中保留 .cache;上线前还要确认托管平台是否完整支持所使用的 DSG、SSR 和函数能力。

ALTERNATIVES

类似项目

这些框架同样支持 React 或内容驱动网站,但在数据层、运行时模型和服务端能力上采用不同取舍。

COMPARISON

Gatsby vs Next.js

Gatsby 与 Next.js 都使用 React 并支持静态和服务端渲染;Gatsby 以 Source Plugin、统一 GraphQL 数据层和内容构建管线见长,Next.js 则以 React Server Components、全栈路由和请求时数据访问见长。

比较维度GatsbyNext.js
核心定位内容型 React 框架与统一数据构建层通用 React 全栈 Web 框架
数据访问Source Plugin 汇入 Node,通过 GraphQL 查询组件靠近数据源直接使用 fetch、数据库或 SDK
默认渲染SSG,页面可选择 DSG 或 SSRServer Components,可静态、动态或流式渲染
路由src/pages、文件路由 API 和 createPagesApp Router、嵌套 Layout、Route Handler 和动态段
图片Gatsby Image、GraphQL Resolver 与 Sharpnext/image 在请求或构建流程中优化图片
扩展生态Source、Transformer 与功能插件React/npm 生态与托管平台集成
服务端能力SSR 页面和函数可用,但不是主要内容模型Server Actions、Route Handlers 和中间件更完整
更适合多 CMS、图片丰富、静态优先的内容网站SaaS、电商、认证和服务端业务逻辑较多的应用
如何选择

如果网站主要是内容交付,需要把多个 CMS 与本地文件统一成可查询 Schema,并重视构建期图片优化,Gatsby 仍有鲜明优势;如果应用包含大量请求时数据、认证、数据变更和后端路由,Next.js 的全栈模型通常更直接。采用 Gatsby 前应以真实数据量测试冷构建、插件兼容性和目标平台的 DSG/SSR 支持。

VERIFICATION

资料核验

版本、维护信息与本页采用的官方资料来源。

最后核验2026 年 7 月 26 日
核验版本官方当前稳定版与文档主线
内容维护Docs100 编辑整理
项目维护状态活跃维护

本次核验覆盖 Gatsby 的核心定位、主要能力、官方入口与开源许可。项目版本持续更新,具体补丁版本、兼容性和迁移要求请在采用前继续核对官方发布记录。

维护状态核验2026 年 7 月 26 日 · 最近可见代码活动:2026 年 7 月 25 日

官方仓库未归档,核验时最近可见的代码活动日期为 2026 年 7 月 25 日。该状态表示项目近期仍有公开维护活动,不代表固定发布频率或长期支持承诺。

查看官方仓库