trouble shooting embedding video in a gatsby site

2020-03-03

 | 

~3 min read

 | 

569 words

Update: I found a more general embedder in the Plugin library: gatsby-remark-embedder Replacing gatsby-remark-embed-video with it worked like a charm - and, at least so far, haven’t had any issues with ordering. Here’s the PR in which I replaced it.

One of the great parts about Gatsby is its plugin ecosystem. As of this writing, there are ~1500 different plugins offering easy integrations with dozens of services and tools to build a website.

I noticed recently that one of mine, the gatsby-remark-embed-video plugin had stopped working — or maybe it never worked. Either way, I wanted to get it working, so I started with the documentation on Github.

At the time, my gatsyb-config configured gatsby-transformer-remark like so:

module.exports = {
    plugins: [
        //...
        {
            resolve: `gatsby-transformer-remark`,
            options: {
                plugins: [
                    {
                        resolve: `gatsby-remark-prismjs`,
                        options: {
                            classPrefix: 'language-',
                            inlineCodeMarker: null,
                            aliases: { bash: 'zsh' },
                            showLineNumbers: false,
                            noInlineHighlight: false,
                        },
                    },
                    {
                        resolve: `gatsby-remark-images`,
                        options: {
                            maxWidth: 590,
                        },
                    },
                    {
                        resolve: `gatsby-plugin-facebook-pixel`,
                        options: {
                            pixelId: 'pixel id here',
                        },
                    },
                    {
                        resolve: `gatsby-plugin-google-analytics`,
                        options: {
                            //trackingId: `ADD YOUR TRACKING ID HERE`,
                        },
                    },
                    {
                        resolve: `gatsby-remark-responsive-iframe`,
                        options: {
                            wrapperStyle: `margin-bottom: 1.0725rem`,
                        },
                    },
                    {
                        resolve: `gatsby-remark-embed-video`,
                        options: {
                            width: 800,
                            ratio: 1.77,
                            height: 400,
                            related: false,
                            noIframeBorder: true,
                        },
                    },
                    `gatsby-remark-autolink-headers`,
                    `gatsby-remark-copy-linked-files`,
                    `gatsby-remark-smartypants`,
                ],
            },
        },
    ],
}

Immediately, the first issue becomes apparent.

In the docs for gatsby-remark-embed-video it says:

Note: if you also rely on gatsby-remark-responsive-iframe, you have to define the embed-youtube plugin first:

plugins: [
  "gatsby-remark-embed-video",
  "gatsby-remark-responsive-iframe"
]

My first attempt to fix was to swap gatsby-remark-embed-video and gatsby-remark-responsive-iframe:

module.exports = {
    plugins: [
        //...
        {
            resolve: `gatsby-transformer-remark`,
            options: {
                plugins: [
                    {
                        resolve: `gatsby-remark-prismjs`,
                        options: {
                            classPrefix: 'language-',
                            inlineCodeMarker: null,
                            aliases: { bash: 'zsh' },
                            showLineNumbers: false,
                            noInlineHighlight: false,
                        },
                    },
                    {
                        resolve: `gatsby-remark-images`,
                        options: {
                            maxWidth: 590,
                        },
                    },
                    {
                        resolve: `gatsby-plugin-facebook-pixel`,
                        options: {
                            pixelId: 'pixel id here',
                        },
                    },
                    {
                        resolve: `gatsby-plugin-google-analytics`,
                        options: {
                            //trackingId: `ADD YOUR TRACKING ID HERE`,
                        },
                    },
                    {
                        resolve: `gatsby-remark-embed-video`,
                        options: {
                            width: 800,
                            ratio: 1.77,
                            height: 400,
                            related: false,
                            noIframeBorder: true,
                        },
                    },
                    {
                        resolve: `gatsby-remark-responsive-iframe`,
                        options: {
                            wrapperStyle: `margin-bottom: 1.0725rem`,
                        },
                    },
                    `gatsby-remark-autolink-headers`,
                    `gatsby-remark-copy-linked-files`,
                    `gatsby-remark-smartypants`,
                ],
            },
        },
    ],
}

Sadly, this did not work. The reason was gatsby-remark-images, which was pointed out by the Scotch.io tutorial on embedding videos in Gatsby:

See how I have used gatsby-remark-embed-video plugin before gatsby-remark-images & gatsby-remark-responsive-iframe plugins since it is the requirement.

I tried bringing the embed-video higher up the chain (and rearrange the plugins that do not have options to the top):

module.exports = {
    plugins: [
        //...
        {
            resolve: `gatsby-transformer-remark`,
            options: {
                plugins: [
                    `gatsby-remark-autolink-headers`,
                    `gatsby-remark-copy-linked-files`,
                    `gatsby-remark-smartypants`,
                    {
                        // Using gatsby-remark-embed-video before gatsby-remark-images & gatsby-remark-responsive-iframe plugins.
                        resolve: `gatsby-remark-embed-video`,
                        options: {
                            maxWidth: 800,
                            ratio: 1.77,
                            height: 400,
                            related: false,
                            noIframerder: true,
                        },
                    },
                    {
                        resolve: `gatsby-remark-prismjs`,
                        options: {
                            classPrefix: 'language-',
                            inlineCodeMarker: null,
                            aliases: { bash: 'zsh' },
                            showLineNumbers: false,
                            noInlineHighlight: false,
                        },
                    },
                    {
                        resolve: `gatsby-plugin-facebook-pixel`,
                        options: {
                            pixelId: 'pixel id here',
                        },
                    },
                    {
                        resolve: `gatsby-plugin-google-analytics`,
                        options: {
                            //trackingId: `ADD YOUR TRACKING ID HERE`,
                        },
                    },
                    {
                        resolve: `gatsby-remark-images`,
                        options: {
                            maxWidth: 590,
                        },
                    },
                    {
                        resolve: `gatsby-remark-responsive-iframe`,
                        options: {
                            wrapperStyle: `margin-bottom: 1.0725rem`,
                        },
                    },
                ],
            },
        },
    ],
}

This did work. And now, I can embed Youtube (or other) videos easily into my website.


Hi there and thanks for reading! My name's Stephen. I live in Chicago with my wife, Kate, and dog, Finn. Want more? See about and get in touch!