reactjsmarkdowngatsbygatsby-plugingatsby-remark-image

Trouble rendering images in markdown with gatsbyjs


I'm using the following GatsbyJS starter: https://www.gatsbyjs.com/starters/jannikbuschke/gatsby-antd-docs/

I'm trying to render an image in a markdown file like so: ![US Energy Infrastructure Visualization](/src/images/us-viz.png)

The markdown file is located at contents/docs/templates/use-cases/us-energy-infrastructure.md

The image is located at src/images/us-viz.png

The result is as follows:

The console and network tabs show a 404 error for the requested image file: enter image description here

enter image description here

This is the contents of my gatsby-config.js file:

module.exports = {
  siteMetadata: {
    title: 'Energy Infrastructure API Documentation',
  },
  plugins: [
    `gatsby-plugin-typescript`,
    `gatsby-plugin-react-helmet`,
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        name: `images`,
        path: `${__dirname}/src/images`,
      },
    },
    `gatsby-transformer-json`,
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        name: `menuItems`,
        path: `${__dirname}/src/menuItems`,
      },
    },
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        name: `sidebar`,
        path: `${__dirname}/src/sidebar`,
      },
    },
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        name: `contents`,
        path: `${__dirname}/contents`,
      },
    },
    `gatsby-plugin-image`,
    `gatsby-transformer-sharp`,
    `gatsby-plugin-sharp`,
    {
      resolve: `gatsby-plugin-manifest`,
      options: {
        name: 'gatsby-starter-markdown',
        short_name: 'starter',
        start_url: '/',
        background_color: '#663399',
        theme_color: '#663399',
        display: 'minimal-ui',
        icon: 'src/images/gatsby-icon.png', // This path is relative to the root of the site.
      },
    },
    {
      resolve: `gatsby-transformer-remark`,
      options: {
        plugins: [`gatsby-remark-images`],
      },
    },
    {
      resolve: `gatsby-plugin-mdx`,
      options: {
        defaultLayouts: {
          default: require.resolve('./src/Layout.tsx'),
        },
        extensions: ['.mdx', '.md'],
        // workaround: https://github.com/gatsbyjs/gatsby/issues/16422#issuecomment-518985316
        plugins: [`gatsby-remark-autolink-headers`],
        gatsbyRemarkPlugins: [
          `gatsby-remark-katex`,
          {
            resolve: `gatsby-remark-images`,
            options: {
              maxWidth: 1035,
            },
          },
          `gatsby-remark-autolink-headers`,
          {
            resolve: `gatsby-remark-prismjs`,
            options: {
              classPrefix: 'language-',
              inlineCodeMarker: null,
              showLineNumbers: true,
              noInlineHighlight: false,
            },
          },
        ],
      },
    },
    `gatsby-plugin-remove-trailing-slashes`,
    // this (optional) plugin enables Progressive Web App + Offline functionality
    // To learn more, visit: https://gatsby.app/offline
    // 'gatsby-plugin-offline',
  ],
  /// this must match the path your webpage is displayed from (the second part of the ternary will be the path prefix for production)
  pathPrefix: process.env.NODE_ENV === 'development' ? '' : '',
}

It appears to meet the necessary requirements for using the Transformer Remark plugin as specified in the Gatsby docs

As far as I can tell the method I'm using for inserting the image into my markdown file should work, I'm not sure what's going on here. Any advice is greatly appreciated!


Solution

  • From gatsby-remark-images plugin documentation:

    You can reference an image in markdown using the relative path, where that path is relative to the location of the Markdown file you’re typing in.

    gatsby-remark-images documentation

    So if your markdown path is:

    contents/docs/template/use-cases/us-energy-infrastructure.md
    

    And your image location is:

    src/images/us-viz.png
    

    You should reference your image file from markdown like so:

    ![Alt text here](../../../../src/images/us-viz.png)