gatsby-theme-try-ghost
Version:
A Gatsby theme for building flaring fast blogs from headless Ghost CMS.
235 lines (230 loc) • 8.41 kB
JavaScript
const _ = require(`lodash`)
const path = require(`path`)
const siteConfigDefaults = require(`./src/utils/siteConfigDefaults`)
const mediaConfigDefaults = require(`./src/utils/mediaConfigDefaults`)
const ghostConfigDefaults = require(`./src/utils/.ghost.json`)
const generateRSSFeed = require(`./src/utils/rss/generate-feed`)
/**
* This is the place where you can tell Gatsby which plugins to use
* and set them up the way you want.
*
* Further info 👉🏼 https://www.gatsbyjs.org/docs/gatsby-config/
*
*/
module.exports = (themeOptions) => {
const siteConfig = _.merge({}, siteConfigDefaults, themeOptions.siteConfig)
const mediaConfig = _.merge({}, mediaConfigDefaults, themeOptions.mediaConfig)
const ghostConfig = _.merge({}, ghostConfigDefaults, themeOptions.ghostConfig)
return {
siteMetadata: siteConfig,
plugins: [
/**
* Content Plugins
*/
{
resolve: `gatsby-source-filesystem`,
options: {
path: path.join(__dirname, `src`, `pages`),
name: `pages`,
},
},
// Setup for optimized images.
// See https://www.gatsbyjs.org/packages/gatsby-image/
{
resolve: `gatsby-source-filesystem`,
options: {
path: path.join(__dirname, `src`, `images`),
name: `images`,
},
},
`gatsby-plugin-sharp`,
{
resolve: `gatsby-transformer-sharp`,
options: {
checkSupportedExtensions: false,
},
},
{
resolve: `gatsby-source-try-ghost`,
options: {
ghostConfig: process.env.NODE_ENV === `development`
? ghostConfig.development
: ghostConfig.production,
cacheResponse: true,
verbose: siteConfig.verbose,
severity: siteConfig.severity,
customFilter: siteConfig.customFilter,
},
},
{
resolve: `gatsby-plugin-ghost-images`,
options: {
lookup: [
{
type: `GhostAuthor`,
imgTags: [`cover_image`, `profile_image`],
},
{
type: `GhostTag`,
imgTags: [`feature_image`],
},
{
type: `GhostPost`,
imgTags: [`feature_image`],
},
{
type: `GhostPage`,
imgTags: [`feature_image`],
},
{
type: `GhostSettings`,
imgTags: [`logo`, `icon`, `cover_image`],
},
],
exclude: node => (
node.ghostId === undefined
),
verbose: siteConfig.verbose,
// Option to disable this module (default: false)
disable: !mediaConfig.gatsbyImages,
},
},
/**
* Utility Plugins
*/
{
resolve: require.resolve(`./plugins/gatsby-plugin-ghost-manifest`),
options: {
short_name: siteConfig.shortTitle,
start_url: `/`,
background_color: siteConfig.backgroundColor,
theme_color: siteConfig.themeColor,
display: `minimal-ui`,
icon: `static/${siteConfig.siteIcon}`,
legacy: true,
query: `
{
allGhostSettings {
edges {
node {
title
description
}
}
}
}
`,
},
},
{
resolve: `gatsby-plugin-feed`,
options: {
query: `
{
allGhostSettings {
edges {
node {
title
description
url
}
}
}
}
`,
feeds: [
generateRSSFeed(siteConfig),
],
},
},
{
resolve: `gatsby-plugin-advanced-sitemap`,
options: {
query: `
{
allGhostPost {
edges {
node {
id
slug
updated_at
created_at
feature_image
}
}
}
allGhostPage {
edges {
node {
id
slug
updated_at
created_at
feature_image
}
}
}
allGhostTag {
edges {
node {
id
slug
feature_image
}
}
}
allGhostAuthor {
edges {
node {
id
slug
profile_image
}
}
}
}`,
mapping: {
allGhostPost: {
sitemap: `posts`,
},
allGhostTag: {
sitemap: `tags`,
},
allGhostAuthor: {
sitemap: `authors`,
},
allGhostPage: {
sitemap: `pages`,
},
},
exclude: [
`/dev-404-page`,
`/404`,
`/404.html`,
`/offline-plugin-app-shell-fallback`,
],
createLinkInHead: true,
addUncaughtPages: true,
},
},
`gatsby-plugin-catch-links`,
`gatsby-plugin-react-helmet`,
`gatsby-plugin-force-trailing-slashes`,
{
resolve: `gatsby-plugin-postcss`,
options: {
postCssPlugins: [
require(`postcss-easy-import`)(),
require(`postcss-custom-properties`)({
preserve: false,
}),
require(`postcss-color-mod-function`)(),
require(`autoprefixer`)(),
require(`cssnano`)(),
],
},
},
`gatsby-plugin-styled-components`,
],
}
}