Gatsby JS 3.0
and Static Site Generators
JaxNode April 2021
Publishing Websites
- HTML/CSS/JS
- CMSs
- Web Applications with app server
- Site Generators
Pros and Cons of HTML Sites
- Pro: Don't need a server to render
- Pro: Simple hosting
- Pro: Fine control over HTML/CSS/JavaScript
- Con: Cumbersome to reuse layout for each page
- Con: No easy way to minify/uglify content
Content Management Systems
- Prebuilt Web Application for publishing website
- Many hosted services
- Don't need to be a Web Developer to publish a Website
Open Source CMS Software
- WordPress
- Drupal
- Joomla
- Contentful
CMS Pros and Cons
- Pro: Can use pre-existing themes
- Pro: Content Can be created by non-web developers
- Pro: Can set up permissions for certain content
- Con: Sometimes inflexible
- Con: Generally requires backing database
- Con: Requires app server or servers
- Con: Slashdot effect
Web Application
- Host custom Web Application
- Express or Hapi Framework
- Use platform of your choice
- Requires a live application server
- Higher costs associated with hosting
Static Site Generators
- Site Templates and Themes
- Very popular with Ruby and Node.js developers
- Site deployed as a static site with HTML/CSS/JS
- Build process compiles HTML
- Deploy to AWS S3, github pages or Netlify
- Gatsby Cloud
Current SSGs
- Jekyll (Ruby)
- Octopress (Ruby)
- Middlemen (Ruby)
- Metalsmith (Node.js)
- Hugo (Node.js)
- Nuxt.js (Node.js)
- Gatsby JS (Node.js/React)
- Vuepress (Node.js/Vue)
Pros and Cons of SSGs
- Pro: Hosted cheaply or for free
- Pro: Static Sites are easier to deploy
- Pro: No database required
- Pro: Create content in HTML or Markdown
- Pro: Publish with existing CMS
- Pro: Less susceptible to Slashdot effect
- Pro: Use git as source of truth
- Con: Harder to do server interactivity
Jekyll
- Jekyll still very popular
- Based on Ruby
- Very Simple
- Build pages in HTML or Markdown
- Liquid template engine
- Built into Github pages
Gatsby JS
- Build using React
- Created by Kyle Mathews
- Serverless
- Very extensible through plugins
- Offline Access
- Build Pages using React or Markdown w/ plugin
- MDX: Incorporate components in your markdown
- Progressive Image Loading
React the Framework
- SPA Framework
- Next.js SSR
- React Native Mobile Apps
- Gatsby JS
Getting Started
- Need both Node and Git
- npm install -g gatsby-cli
- gatsby new [site-name]
- gatsby new [site-name] [template-name]
- gatsby develop
- gatsby build
- gatsby serve
Gatsby Structure
public
src
--pages
gatsby-config.js
gatsby-node.js
gatsby-browser.js
package.json
Hello-World!
// src/pages/index.js
import React from "react"
export default () => <div>Hello world!</div>
No Router
- No need for router because using pages
- import the <Link /> object from Gatsby lib
- <Link to="/contact/">Contact</Link>
<Link />
// src/pages/index.js
import React from "react"
import { Link } from "gatsby"
import Header from "../components/header"
export default () => (
<div style={{ color: `purple` }}>
<Link to="/contact/">Contact</Link>
<Header headerText="Hello Gatsby!" />
<p>What a world.</p>
<img src="https://source.unsplash.com/random/400x200" alt="" />
</div>
)
Style options
- Regular CSS
- CSS Modules
- CSS in JS
- Styled Components
- SASS Plugin
Gatsby Data
- GraphQL Server builtin
- Source plugins for file system, CSVs, Word Press, etc..
- Query Data directly from pages
- Components can query data from <StaticQuery/>
GraphQL Example
// src/pages/index.js
import React from 'react'
import { graphql } from 'gatsby'
const HomePage = ({data}) => {
return (
<div>
{data.site.siteMetadata.description}
</div>
)
}
export const query = graphql`
query HomePageQuery {
site {
siteMetadata {
description
}
}
}
`
export default HomePage
query {
markdownRemark(id: { eq: "e16204e2-d882-50dd-a24d-316d166251e0" }) {
excerpt
frontmatter {
title
date
category
}
}
}
query($id: String!) {
markdownRemark(id: { eq: $id }) {
excerpt
frontmatter {
title
date
category
}
}
}
With parameters
Plugins
- Highly extendable
- Two types of plugins
- Source plugins
- Transformer plugins
- Can be installed using NPM
- Configured using the gatsby-config.js file
# Markdown
- Shorthand for HTML
- Very popular with bloggers, writers and documentation
- Invented by Jon Gruber
- Github has a formatter
- Used in combination with Frontmatter, all you need
---
title: "Pandas and Bananas"
date: "2017-08-21"
---
# This is a H1 tagged line
This will be in a p tag. Do Pandas eat bananas? Check out this short video that shows that yes! pandas do
seem to really enjoy bananas!
* This will create a bullet point in ul -> li.
This will be a link to [jaxnode.com](https://www.jaxnode.com).
<iframe width="560"
height="315"
src="https://www.youtube.com/embed/4SZl1r2O_bY"
frameborder="0"
allowfullscreen></iframe>
Hosting
- Many inexpensive options
- Anyone providing static hosting
- Github pages, anything in the gh-pages branch or the master branch for username.github.io
- Amazon S3
- Netlify
- Gatsby Hosting
Don't use FTP
GIT is FTP for Code
Scott Hanselman
Gatsby Wordpress
- Best of both
- Headless Wordpress
- WP Plugins WPGraphQL and WPGatsby
Gatsby 3.0 Upgrade
- npm install gastby@latest --save
- npm outdated
- 'navigateTo' is now just 'navigate'
import moduleStyle from 'module.css'- import * moduleStyle from 'module.css'
- gatsby-node.js does not include graphQL
- const graphql = require('gatsby').graphql;
- Requires minimum vs 12.13 of Node
Gatsby-plugin-image
- import { GatsbyImage } from "gatsby-plugin-image"
- Changes graphQL for images
- data.file.childImageSharp.gatsbyImageData
- New StaticImage and GatsbyImage components
- Defaults to correct aspect ratio
- fluid images no longe exist
- WebP supported with <picture> tag
//shell
> npm install gatsby-plugin-image gatsby-plugin-sharp gatsby-transformer-sharp
// gatsby-node.js
module.exports = {
plugins: [
`gatsby-plugin-image`,
`gatsby-plugin-sharp`,
`gatsby-transformer-sharp`,
],
}
Codemods
- Codemodes automatically refactor your code
- Only try this in a new branch
- npx gatsby-codemods gatsby-plugin-image
DEMO
Questions?
Resources
- gatsbyjs.org
- gatsbyjs.com
- Learn with Jason (Jason Lengstorf) Youtube channel
- youtube.com/channel/UCnty0z0pNRDgnuoirYXnC5A
- Gatsby JS Channel
- youtube.com/channel/UCjnp770qk7ujOq8Q9wiC82w
Upgrading to Gatsby JS 3.0 and Static Site Generators
By David Fekke
Upgrading to Gatsby JS 3.0 and Static Site Generators
- 651