How to Set up a Gatsby JS Project

April 22, 2020

Gatsby is a build tool for setting up Static React Applications. It uses server-side rendering and is great for creating blogs sites.

 

Gatsby code is generated on build which is a great performance benefit of using a static site.

 

To start with Gatsby first install gatsby-cli globally with

npm install -g gatsby-cli

Default new project

Once gatsby-cli is installed, you can create new gatsby projects with the command gatsby new project-name. In this tutorial we will use a starter instead which is the same command with a Gatsby starter url at the end.

 

Gatsby will use gatsby-starter-default by default to generate the project code. There are other starters you can use, and this is generally the simplest route to get familiar.

Starters

Starters in gatsby are git repositories which contain boilerplate project code. All of the starters can be found in the Gatsby Starter Library. Some of the most favorited starters include

Starter name Description
gatsby-starter-default simple and quick starter
gatsby-starter-blog basic markdown blog setup
gatsby-starter-netlify-cms example Netlify CMS project
gatsby-advanced-starter includes advanced use cases
gatsby-material-starter basic material design setup

There are hundreds of gatsby starters available and new ones introduced all the time. For this tutorial we will be using gatsby-starter-blog as it includes the default project as well as a basic markdown blog setup (one of gatsby’s best features).

New Blog Project

To create a project using a specifc starter, simply add the URL for the starter’s git repo after the project name

gatsby new blog-project https://www.gatsbyjs.org/starters/gatsbyjs/gatsby-starter-blog/

Once the project is created, change directories into it and start up the application in the browser by entering

cd blog-project
gatsby develop

This will run your gatsby project in the browser at http://localhost:8000.

Success: The gatsby build tool is similar to create-react-app as it will create a ready to deploy React application which can also be developed on locally. The rest of this tutorial will describe basic files and features in a gatsby-starter-blog project.

Project Structure

The gatsby blog starter will create the following folders along with various other files

content/
- assets/
- blog/
src/
- components/
- pages/
- templates/
- utils/
static/

Gatsby projects use standard files you will see in other React applications such as package.json, prettierrc, README.md, and .gitignore. They also include 3 gatsby-specific files in the root of each gatsby project: gatsby-browser.js, gatsby-config.js, gatsby-node.js which will be described later.

Blog content folder

This is where using gatsby-starter-blog really saves us a bunch of time. Here we have assets and blog folders.

Assets

Here we can store assets such as images to be used in our project. Gatsby handles and optimizes images slightly differently that create-react-app with its Image component, although we can still import images the normal way (i.e. import DogImage from '../assets/dog.jpg').

Blog

This is where we can store all of our blog markdown content. Each folder in /blog will contain a specific blog post and create a page at the endpoint of the blog post’s folder name.

 

It is recommended to use kebab case for blog posts and include a index.md file in each post. Each markdown file will also include details about the post at the top. Blog post folders can also include image’s associated with that post.

React src/ folder

This is the folder where you will build your React components, individual pages, templates, and util functions.

components

Include your standard React components here. By default, there will be SEO and bio components which come with some examples of gatsby best practices and can be reused across pages and posts.

 

The layout component is also here and will be rendered on every page in the application. This is a way to create standard formatting and is already styled by default. Definitely get used to adjusting the styles and setup in this component.

pages

Every .js file here will generate a page at that endpoint by default. This is a great place to create custom one-off javascript pages in your application.

 

This folder also contains your index.js file which is the component that will render when the user visits the root of your site at /. This file includes the layout component and also provides good examples of best practices. Lastly is the 404 page which is served whenever the user visits a page that does not exist.

templates

Templates are reusable layouts in gatsby. This project starts with a blog-post.js template that is rendered for every markdown file in the posts located at content/blog/post-name/index.md.

 

New templates can be added to this folder and specified in the gatby-node.js file we will soon go over.

utils

Lastly in the src folder is the folder for our utility functions. By default, gatsby uses the typography.js file to import fonts for the application.

static folder

The static folder is where we can include some of our static assets for the project. This is where our favicon.ico and robots.txt files live and can be configured.

Gatsby files

Each gatsby project comes with and requires the following 3 gatsby files.

Note: If you make changes in any of these 3 files, make sure to restart your gatsby project as this data is collected when the project is built.

Gatsby Browser

The gatsby-browser.js file lets you respond to actions within the browser, and wrap your site in additional components. By default, this file only includes imports for various typefaces and a prism theme.

Gatsby Config

The gatsby-config.js file defines your site’s metadata, plugins, and other general configuration details. Make sure to include any additional plugins that you install here. Most plugins can be used by adding a string with the plugin’s name or an object specified in the plugins docs.

Gatsby Node

The gatsby-node.js file is used to dyamically create pages and add nodes in GraphQL. This file contains the code which takes each of the blog posts and creates a node and page dynmically to render the markdown using the blog-post component. This file does a lot of heavy lifting and is where all of the gatsby templating logic is added.

Conclusion

Gatsby is a great tool for easy-to-setup server-side rendering in a React application. It is often the go-to build tool for static projects as it compiles the entire site on build time. While this approach can potentially run into issues at scale, it is often the ideal way to build a SSR React project with under 1000 pages. Gatsby’s vast libaries of plugins, starters, and themes make it a powerhouse tool for generating fast, crawlable websites.

Other Tools Tutorials

React

Top 5 Ways to Setup a React Application

Tools

Hosting Web Apps with Heroku