---
# System prepended metadata

title: Gatsby
tags: [Gatsby]

---

---
title: "Gatsby"
path: "Gatsby"
---

{%hackmd @RintarouTW/About %}

# Gatsby <img class="icon" height="32" width="32" src="https://cdn.jsdelivr.net/npm/simple-icons@latest/icons/gatsby.svg"></img>

`gatsby-config.js`
  - Site(App) Configuration

`gatsby-node.js` (Build Time)
  - Create Page from sources

`gatsby-ssr.js `(Server Side)
  - Server Side Rendering

`gatsby-browser.js` (Client Side)
  - wrapPageElement
  - wrapRootElement

## Source

src/pages/
: Content files (`.md` | `.mdx`)

src/components/
: `layout.js`, `layout.css`, JSX components

## plugins

`gatsby-transformer-remark` (markdown to html)
  * `gatsby-remark-mathjax` (support math blocks `$` & `$$`)
  * `gatsby-remark-graphviz` (support dot language)
  * `gatsby-remark-vscode` (code highlight)

[`gatsby-plugin-typography`](https://kyleamathews.github.io/typography.js/) (themes)
  * mark `src/component/layout.js` , don't import layout.css to work
  * Kirkham (good theme)

## GraphQL <img class="icon" height="32" width="32" src="https://cdn.jsdelivr.net/npm/simple-icons@latest/icons/graphql.svg"></img>

How does the graphql tag work?
graphql is a tag function. Behind the scenes Gatsby handles these tags in a particular way:

The short answer
During the Gatsby build process, GraphQL queries are pulled out of the original source for parsing.

The longer answer
The longer answer is a little more involved: Gatsby borrows a technique from Relay that converts your source code into an abstract syntax tree (AST) during the build step. file-parser.js and query-compiler.js pick out your `graphql-tagged templates and effectively remove them from the original source code`.

This means that the graphql tag isn’t executed the way that JavaScript code is typically handled. For example, you `cannot use expression interpolation with Gatsby’s graphql tag`. However, it’s possible to pass variables into page queries with the context object when creating pages.


## Gatsby Internal

https://www.gatsbyjs.org/docs/gatsby-internals/

###### tags: `Gatsby`