1.1.4 • Published 1 year ago

gatsby-plugin-dynamic-open-graph-images v1.1.4

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Gatsby plugin for dynamic open graph images

npm npm

A Gatsby plugin to derive and generate images for the Open Graph Protocol directly from React Components.


📌 NOTICE

This plugin originates from gatsby-plugin-open-graph-images and uses the same approach and usage. The only difference is the internal implementation. It creates open graph images relying only on file system.


How to install

npm i gatsby-plugin-dynamic-open-graph-images

How to use

  1. Place the plugin in your main gatsby-config.js

    plugins: [`gatsby-plugin-dynamic-open-graph-images`];
  2. The creation of Open Graph images is done by createOpenGraphImage() within your gatsby-node.js file.

    Example

    const { createOpenGraphImage } = require("gatsby-plugin-dynamic-open-graph-images");
    
    exports.createPages = async ({ actions }) => {
      const { createPage } = actions;
    
      const openGraphImage = createOpenGraphImage(createPage, {
        component: path.resolve(`src/templates/index.og-image.js`),
        size: {
          width: 400,
          height: 50,
        },
      });
    };

    You can also pass open-graph image metadata as pageContext and simply use it within your page or component.

    Example

    • gatsby-node.js
    const { createOpenGraphImage } = require("gatsby-plugin-dynamic-open-graph-images");
    
    exports.createPages = async ({ actions, graphql }) => {
      const { createPage } = actions;
    
      // query data
      const result = await graphql(...)
    
      // get posts data from query result
      const posts = result.data.allMdx.edges;
    
      posts.forEach(({ node }) => {
        createPage({
          path: node.frontmatter.slug,
          component: postTemplate,
          context: {
            // pass open-graph image metadata as pageContext
            ogImage: createOpenGraphImage(createPage, {
              component: postOgImageTemplate,
              context: {
                id: node.id,
                title: node.frontmatter.title,
                ...
              },
            }),
          },
        });
      });
    };
    • Within your page or component
    export const Head = ({ location, pageContext }) => {
      const { ogImage } = pageContext;
    
      return (
        <SEO
          ogImage={ogImage}
          ...
        />
      )
    }
    
    const SEO = ({ ogImage }) => {
      return (
        <>
          <meta property="og:image" content={domain + ogImage.imagePath} />
          <meta property="og:image:width" content="400" />
          <meta property="og:image:width" content="50" />
        </>
      );
    }

API

createOpenGraphImage(createPage, options)

Parameters

parameterRequireddescription
createPageOGatsby createPage action
optionsO

options

optionRequiredtypedescriptiondefault
componentOstringThe absolute path of React component for open-graph iamge template. It receives context value as pageContext.N/A
contextOobjectGatsby page context. id property must be provided to distinguish components/images.N/A
sizeX{ width: number, height: number }The size for the generated image.{ width: 1200, height: 630}
outputDirXstringThe directory where the rendered gatsby components are temporarily stored, to be later saved as images."__og-image"

Returns

Open-graph image metadata

{
  componentPath: '__og-image/c6f9bb',
  imagePath: '__og-image/c6f9bb.png',
  size: { width: 1200, height: 630 }
}

Note

If you use plugins that iterate over your pages, like gatsby-plugin-sitemap, exclude the outputDir:

{
  resolve: `gatsby-plugin-sitemap`,
  options: {
    exclude: [`/__og-image/*`],
  },
},
1.1.4

1 year ago

1.1.3

1 year ago

1.1.2

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

2 years ago