I often struggle with the syntax of config files. What are resolvers? How do options work? etc.
As a result, while making my way through Jason Lengstorf’s Introduction to Gatsby on Frontend Masters, I found the following interesting¹:
Within my gatsby-config.js file in the root of a Gatsby project, I have two plugins:
module.exports = {
    ...
  plugins: ['gatsby-plugin-emotion', 'gatsby-plugin-react-helmet']
  ...
}
That, however, is functionally equivalent to:
module.exports = {
    ...
  plugins: [{resolve: 'gatsby-plugin-emotion' }, {resolve: 'gatsby-plugin-react-helmet'}]
  ...
}
The former is just shorthand because for those, I didn’t need to add any configuration. What happens if I install a plugin that does require more detail about how it will be used? That’s where the fact that writing just gatsby-plugin-emotion is shorthand for an object starts to matter.
Using the gatsby-mdx as an example, we can see this in practice:
module.exports = {
  ...
  plugins: [
    {
      resolve: 'gatsby-mdx',
      options: {
        defaultLayouts: {
          default: require.resolve('./src/components/layout.js'),
        },
      },
    },
  ],
  ...
};
What this is saying is that for any mdx files that I load, the files will be loaded into the layout template I defined in our src/components/layout.js.
There’s still the question of what options the gatsby-mdx will accept. For that, the docs are quite helpful in specifying the configuration options.²
Resources:
 

 
    
Top comments (0)