Gatsby 静态站点生成 SSG

FreeGuideOnline 20阅读 2026-07-10

bash npm install -g gatsby-cli


验证安装:

```bash
gatsby --version

创建第一个 Gatsby 项目

使用官方启动器快速搭建项目骨架:

gatsby new my-gatsby-site

该命令会从 gatsby-starter-default 模板克隆代码并安装依赖。完成后进入项目目录:

cd my-gatsby-site

启动开发服务器:

gatsby develop

浏览器访问 http://localhost:8000,你将看到初始页面。修改 src/pages/index.js 文件,页面会实时热更新。

项目结构解析

一个典型的 Gatsby 项目目录结构如下:

my-gatsby-site/
├── src/
│   ├── pages/          # 页面组件,自动生成路由
│   ├── components/     # 可复用 React 组件
│   └── images/         # 图片等静态资源
├── gatsby-config.js    # 站点全局配置与插件声明
├── gatsby-node.js      # Node API,构建流程自定义
├── gatsby-browser.js   # 浏览器端 API
├── gatsby-ssr.js       # 服务端渲染 API
└── package.json
  • gatsby-config.js:核心配置文件,添加插件、元数据等。
  • gatsby-node.js:在构建阶段动态创建页面(如从 Markdown 生成文章页)。
  • src/pages:文件即路由,about.js/aboutindex.js/

页面与路由

Gatsby 自动将 src/pages 下的组件转换为路由。例如:

// src/pages/about.js
import * as React from 'react'

const AboutPage = () => {
  return (
    <main>
      <h1>关于我们</h1>
      <p>这是一个 Gatsby 示例页面</p>
    </main>
  )
}

export default AboutPage

访问 http://localhost:8000/about 即可看到该页面。

链接与导航

使用 Gatsby 提供的 Link 组件实现无刷新路由跳转:

import { Link } from 'gatsby'

<Link to="/about">关于</Link>

数据层与 GraphQL 查询

Gatsby 的强大之处在于统一的数据层。插件可以将数据源(文件系统、CMS、API)导入到数据层,你可以在页面组件中通过 GraphQL 查询所需数据。

页面级查询

在页面组件底部导出 pageQuery

import * as React from 'react'
import { graphql } from 'gatsby'

const HomePage = ({ data }) => {
  return (
    <div>
      <h1>{data.site.siteMetadata.title}</h1>
      <p>{data.site.siteMetadata.description}</p>
    </div>
  )
}

export const query = graphql`
  query HomeQuery {
    site {
      siteMetadata {
        title
        description
      }
    }
  }
`

export default HomePage

data 属性会自动注入组件,包含查询结果。

非页面组件中的静态查询

使用 useStaticQuery 钩子:

import { useStaticQuery, graphql } from 'gatsby'

const Header = () => {
  const data = useStaticQuery(graphql`
    query HeaderQuery {
      site {
        siteMetadata {
          title
        }
      }
    }
  `)
  return <header>{data.site.siteMetadata.title}</header>
}

调试 GraphQL

开发时访问 http://localhost:8000/___graphql 进入 GraphiQL 界面,可在线构建并测试查询。

使用插件扩展能力

插件是 Gatsby 生态的核心,负责引入数据源、图片优化、样式支持等。

安装与配置插件

以读取本地文件系统为例,安装 gatsby-source-filesystem

npm install gatsby-source-filesystem

编辑 gatsby-config.js

module.exports = {
  siteMetadata: {
    title: `我的博客`,
    description: `一个 Gatsby 示例站`,
  },
  plugins: [
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        name: `blog`,
        path: `${__dirname}/content/blog/`, // 存放 Markdown 文件的目录
      },
    },
  ],
}

重启开发服务器后,文件节点将被注入数据层,你可以在 GraphiQL 中查询 allFileallMarkdownRemark(需搭配 gatsby-transformer-remark)。

常用插件推荐

  • gatsby-transformer-remark:解析 Markdown 为可查询的 HTML 和 frontmatter。
  • gatsby-plugin-image:提供响应式高性能图片组件。
  • gatsby-plugin-sharp:图片处理底层依赖。
  • gatsby-plugin-manifest:生成 PWA 清单文件。
  • gatsby-plugin-offline:离线支持与服务工作者。

构建与部署

开发完成后,执行构建命令生成生产环境文件:

gatsby build