Using both Traced SVGs and WebP with gatsby-contentful-source
gatsby-contentful-source supports Traced SVGs and WebP, by using either GatsbyContentfulFluid_tracedSVG or GatsbyContentfulFluid_withWebp, but you have to choose between one or the other. Fortunately is not that difficult to add a fragment query this allows having both.
1. Define a Fragment With Both Traced SVG and WebP
Create a file with shared query fragments, e.g. fragments.ts. Just make sure that Contentful can see the file. Mat Clutter has more information about Using GraphQL fragments across multiple templates in GatsbyJS.
import { graphql } from "gatsby"
// The name of this constant isn't important.
export const tracedSvgAndWithWebp = graphql`
fragment GatsbyContentfulFluid_tracedSvg_withWebp on ContentfulFluid {
tracedSVG
aspectRatio
src
srcSet
srcWebp
srcSetWebp
sizes
}
`
2. Use the New Fragment
Replace your exiting fragments with new GatsbyContentfulFluid_tracedSvg_withWebp, e.g.
export const imageQuery = graphql`
image {
fluid(maxWidth: 1680, maxHeight: 1050) {
...GatsbyContentfulFluid_tracedSvg_withWebp
}
description
}
`
Bonus info: Creating Your Own Fragments
The fragments that gatsby-contentful-source comes with are all defined in their fragments.js file. GatsbyContentfulFluid_tracedSvg_withWebp is a combination of GatsbyContentfulFluid_tracedSVG and GatsbyContentfulFluid_withWebp.