本文 Gatsby 版本为 v3。

Gatsby

介绍

Gatsby 是一个基于 React 的静态站点生成器。

Gatsby 通过 React 开发应用,当应用开发完成后,Gatsby 可以把这个 React 应用转化成静态的 HTML 应用。

静态应用的优势

  1. 访问速度快
  2. 更利于 SEO 搜索引擎的内容抓取
  3. 部署简单

工作流程

在 Gatsby 应用的工作流程中主要分为了三个部分:

  1. DATA SOURCES - 数据源

    • Gatsby 应用中的数据可以来自 Markdown JSON CMS数据 API 数据等
    • 应用中可以同时存在多个数据源
  2. BUILD - 开发与构建
    • 当开启开发服务器的时候

      • Gatsby 首先会从外部数据源中获取所有的数据
      • 然后把获取到的数据,统一放到 GraphGL 这个数据层当中
      • 当进行页面开发的时候,需要从这个数据层中获取数据
    • 当执行构建命令的时候
      • Gatsby 还是会先从外部数据源中获取数据
      • 然后把所有数据再次放到 GraphGL 数据层当中
      • Gatsby 会把数据层中的数据和页面进行组合生成静态的 HTML 页面
    • 当静态的 HTML 页面生成后,就可以进行部署了
  3. DEPLOY - 部署

框架特性

  1. 开发体验:基于 React 和 GraphQL,结合了 webpack,babel,react-router 等前端领域中最先进工具。
  2. SEO 友好:采用数据层和 UI 层分离而不失 SEO 的现代前端开发模式。
  3. 用户体验:数据预读取,在浏览器空闲的时候预先读取链接对应的页面内容。使静态页面拥有 SPA 应用的用户体验。
  4. 数据来源多样化:Headless CMS,markdown,API 等
  5. 功能插件化:Gatsby 中提供了丰富且功能强大的各种类型的插件,可以按需安装。

创建 Gatsby 项目

gatsby-cli 要求 nodejs 版本至少是 v12.13.0。

全局安装脚手架工具:

npm install -g gatsby-cli

创建一个自定义站点:

gatsby new [<site-name>]

也可以从 gatsby 提供的模板(官方称为 Starter)克隆:

gatsby new [<site-name> [<starter-url>]]
# gatsby new gatsby-demo https://github.com/gatsbyjs/gatsby-starter-hello-world
# hello-world 只包含一些基本的依赖

启动:

# 切换到站点目录
cd <site-name>
# 启动开发服务器
gatsby develop
# 或 npm start 或 npm run develop 它们实际执行的都是 gatsby develop# 访问:http://localhost:8000

创建页面

基于文件的路由系统创建页面

Gatsby 框架内置基于文件的路由系统,页面组件被放置在 src/pages 文件夹中。

与 Next.js 不同,组件文件中必须引入 React。

// src\pages\list.js
import React from "react"export default function List() {return <div>List Page</div>
}

访问:http://localhost:8000/list

以编程的方式创建页面

基于同一个模板创建多个 HTML 页面,有多少数据就创建多少页面。

比如,商品详情页面,有多少商品就生成多少商品详情展示页面。

具体方式:

  1. 在项目根目录下创建 gatsby-node.js 文件

    • gatsby-node.js 用于存放 Gatsby Node APIs,用于定制或扩展功能。
    • 该文件中写的都是 Node.js 代码,所以要遵循 CommonJS 模块化规范。
  2. 文件导出对象中添加 createPages 函数
    • 该函数在构建应用时被调用
    • 该函数提供对 createPage 操作的访问,该操作是以编程方式创建页面的核心。
  3. createPages 内部获取模板绝对路径,获取组件所需数据,最终根据模板和数据,调用 createPage 方法,创建页面路由

首先创建一个模板组件:

// src\templates\person.js
import React from "react"export default function Person(props) {console.log(props)// pageContext 是传递给模板的数据const { pageContext } = propsconst { name, age } = pageContextreturn (<div><span>{name}</span><span>{age}</span></div>)
}

然后创建 gatsby-node.js

// gatsby-node.js// 创建页面
function createPages({ actions }) {// 获取模板绝对路径const template = require.resolve("./src/templates/person.js")// 获取组件所需数据const persons = [{slug: "zhangsan",name: "张三",age: 20,},{slug: "lisi",name: "李四",age: 30,},]// 根据模板和数据创建页面const { createPage } = actionspersons.forEach(person => {createPage({path: `/person/${person.slug}`, // 页面访问地址component: template, // 模板绝对路径context: person, // 传递给模板的数据})})
}module.exports = { createPages }

因为该方法是在构建应用的时候去执行,所以需要重新启动应用。

保存 gatsby-node.js 文件时浏览器也会弹出提示,帮助开发者重启构建:

The develop process needs to be restarted for the changes to gatsby-node.js to be applied.
Do you want to restarted the develop process now?

点击确定等待 Gatsby restart 后即可访问 http://localhost:8000/person/zhangsan

Link 组件

在 Gatsby 框架中页面跳转通过 Link 组件实现。

// src\pages\index.js
import React from "react"
import { Link } from "gatsby"export default function Home() {return <div><Link to="/person/zhangsan">张三</Link><Link to="/person/lisi">李四</Link></div>
}

Gatsby 学习 - 01 Gatsby 介绍、创建页面相关推荐

  1. Gatsby 学习 - 03 Gatsby 插件

    Gatsby 插件 Gatsby 框架内置插件系统,插件是为应用添加功能的最好的方式. 在 Gatsby 中有三种类型的插件: 数据源插件(source):负责从应用外部获取数据,将数据统一放在 Ga ...

  2. Jest 学习01 - Jest 介绍、快速体验、vscode 智能提示、配置、监视模式、Babel 配置

    起步 测试到底测什么 提到测试的时候,即使是最简单的一个代码块可能都让初学者不知所措.最常问的问题的是"我怎么知道要测试什么?".如果你正在写一个 Web 应用,那么依次测试每个页 ...

  3. Koa 学习 01 Koa 介绍和基本使用(路由、静态资源托管、中间件)

    Koa 介绍 Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造,致力于成为 web 应用和 API 开发领域中的一个更小.更富有表现力.更健壮的基石. 官网:https://k ...

  4. vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍

    这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...

  5. html5学习笔记---01.HTML5介绍,02.HTML5的新特性

    2013/6/10 01.HTML5介绍 a.创梦技术qq交流群:CreDream:251572072 -------------------- a.创梦技术qq交流群:CreDream:251572 ...

  6. 微信小程序学习2:开发工具快速创建页面(pages)的四个文件(.js,.json,.wxml, .wxss)

    微信小程序学习2:开发工具快速创建页面(pages)的四个文件(.js,.json,.wxml, .wxss) [1]首先在pages文件夹下创建一个页面文件夹,比如我打算创建个人中心,我创建一个ho ...

  7. ThinkPhp学习01

    原文:ThinkPhp学习01 一.ThinkPHP的介绍            MVC   M - Model 模型                工作:负责数据的操作   V - View  视图 ...

  8. PHP学习笔记-PHP与Web页面的交互2

    转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/51761308 本文出自:[顾林海的博客] 前言 在<PHP学习笔 ...

  9. 非等高cell实战(01)-- 实现微博页面

    非等高cell实战(01)-- 实现微博页面 学习过UITableView.AutoLayout以及MVC的相关知识,接下来通过一个微博页面实战来整合一下. 首先看一下效果图: 需求分析 此页面为非等 ...

最新文章

  1. 5.fork和vfork
  2. 删除数据库里面所有表!
  3. UI自动化测试 appium简介
  4. 非酋用计算机弹唱,非酋简谱 薛明媛/朱贺 听说爱情就是这样子
  5. 摩托罗拉mpkg安装签名方法研究
  6. eclipse安装超帅主题----darkest dark
  7. 使用 Colab 训练 Pytorch-Yolov4 (WongKinYiu版)
  8. html5显示文件后缀,如何显示文件后缀名
  9. Hyperledger Fabric Transaction Proposal过程
  10. 51单片机八位数码管1到F动态滚动显示仿真及程序
  11. word写论文时参考文献、目录以及页码设置
  12. win策略计算机配置,BGinfo配置策略(Server2012R2-Win10)
  13. CSS基础(6)- 属性值的计算过程
  14. Free HEIC Converter(heic格式转换器)v1.0.6官方版
  15. 从互联网汽车到国企改革:砸钱还是自己干?
  16. 【目标检测】轻量级网络SqueezeNet
  17. AlexNet模型思想详解及核心代码实现
  18. IJCAI论文 | 基于改进注意力循环控制门,品牌个性化排序升级系统来了
  19. 2022年陕西高级工程师职称评审流程是什么呢?甘建二
  20. 初认识Java调用SPSS统计软件

热门文章

  1. [NOI2005] 瑰丽华尔兹
  2. mysql 创建 存储过程 与执行存储过程 每天零凌晨一点定时执行
  3. 联邦学习FATE框架安装搭建 - CentOS8
  4. 定了!家庭教育指导师全国统一培训考核,报名通道今日开启!
  5. 技术面试问题汇总第006篇:腾讯管家反病毒工程师-电话面试
  6. 批量更改json文件中指定内容
  7. 智能语音外呼系统 OKCC没有电脑的坐席能不能开展工作
  8. 鸟哥私房菜第19章——认识和分析日志文件
  9. 苏宁易购山寨版 JavaWeb项目,源码我奉献了吧!
  10. 福利丨0元得3000+视频课精品专栏,邀好友得奖金!