|
| 1 | +--- |
| 2 | +date: "2021-09-17" |
| 3 | +version: "3.14.0" |
| 4 | +title: "v3.14 Release Notes" |
| 5 | +--- |
| 6 | + |
| 7 | +Welcome to `[email protected]` release (September 2021 #1) |
| 8 | + |
| 9 | +> This is the final minor release for gatsby v3. Gatsby v4 beta is already published behind |
| 10 | +> the `next` npm tag and the next stable release will be `[email protected]`. [See what's inside!](/gatsby-4/) |
| 11 | +> |
| 12 | +> We will keep publishing patches for 3.14.x with hotfixes until `4.0.0` stable is published and at least several |
| 13 | +> weeks after. |
| 14 | +
|
| 15 | +Key highlights of this release: |
| 16 | + |
| 17 | +- [Better UX for navigation in the middle of deployment](#better-ux-for-navigation-in-the-middle-of-deployment) |
| 18 | +- [New developer tools](#new-developer-tools) - `createPages` snippet in GraphiQL and new GraphQL capability |
| 19 | +- [Preparations for gatsby v4](#preparations-for-gatsby-v4) - API deprecations; migration guide; docs |
| 20 | +- [Improvements for `gatsby-source-drupal`](#gatsby-source-drupal-improvements) |
| 21 | +- [New home for `gatsby-plugin-netlify`](#new-home-for-gatsby-plugin-netlify) |
| 22 | + |
| 23 | +Also check out [notable bugfixes](#notable-bugfixes--improvements). |
| 24 | + |
| 25 | +**Bleeding Edge:** Want to try new features as soon as possible? Install `gatsby@next` and let us know |
| 26 | +if you have any [issues](https://github.com/gatsbyjs/gatsby/issues). |
| 27 | + |
| 28 | +[Previous release notes](/docs/reference/release-notes/v3.13) |
| 29 | + |
| 30 | +[Full changelog ](https://github.com/gatsbyjs/gatsby/compare/[email protected]@3.14.0) |
| 31 | + |
| 32 | +--- |
| 33 | + |
| 34 | +## Better UX for navigation in the middle of deployment |
| 35 | + |
| 36 | +This release solves a common UX problem with navigation in the middle of deployment. |
| 37 | +Imagine the following scenario: |
| 38 | + |
| 39 | +1. Users loads a page |
| 40 | +2. New version of the site is deployed |
| 41 | +3. User tries to navigate to another page with `gatsby-link` |
| 42 | + |
| 43 | +However, nothing happens and there are some JS errors in the console. |
| 44 | + |
| 45 | +It happens because paths of JS chunks change with the new deployment and so the old chunks cannot be found. |
| 46 | +This problem is now addressed in Gatsby automatically. Once we spot this error, the page is hard-reloaded for the user. |
| 47 | + |
| 48 | +This was one of the most [upvoted issues](https://github.com/gatsbyjs/gatsby/issues/18866) in our repo. |
| 49 | +See [PR #33032](https://github.com/gatsbyjs/gatsby/pull/33032) for details. |
| 50 | + |
| 51 | +## New developer tools |
| 52 | + |
| 53 | +### `createPages` snippet in GraphiQL |
| 54 | + |
| 55 | +Often, a developer will begin creating the site by examining their data layer in GraphiQL. They will then want to create pages based off of their initial query. For example: |
| 56 | + |
| 57 | +```graphql |
| 58 | +query MyQuery { |
| 59 | + allContentfulBlogPosts { |
| 60 | + nodes { |
| 61 | + id |
| 62 | + slug |
| 63 | + } |
| 64 | + } |
| 65 | +} |
| 66 | +``` |
| 67 | + |
| 68 | +Usually this will end up with this code in `gatsby-node.js`: |
| 69 | + |
| 70 | +```javascript |
| 71 | +const path = require(`path`) |
| 72 | + |
| 73 | +exports.createPages = async ({ graphql, actions }) => { |
| 74 | + const { createPage } = actions |
| 75 | + |
| 76 | + const result = await graphql(` |
| 77 | + { |
| 78 | + allContentfulBlogPosts { |
| 79 | + nodes { |
| 80 | + id |
| 81 | + slug |
| 82 | + } |
| 83 | + } |
| 84 | + } |
| 85 | + `) |
| 86 | + const templatePath = path.resolve(`PATH/TO/TEMPLATE.js`) |
| 87 | + |
| 88 | + result.data.allContentfulBlogPosts.nodes.forEach(node => { |
| 89 | + createPage({ |
| 90 | + path: NODE_SLUG, |
| 91 | + component: templatePath, |
| 92 | + context: { |
| 93 | + slug: NODE_SLUG, |
| 94 | + }, |
| 95 | + }) |
| 96 | + }) |
| 97 | +} |
| 98 | +``` |
| 99 | + |
| 100 | +Doing it manually is tedious, but now you can generate this snippet from GraphiQL |
| 101 | +and paste to `gatsby-node.js`! |
| 102 | + |
| 103 | +See [PR #32968](https://github.com/gatsbyjs/gatsby/pull/32968) for details. |
| 104 | + |
| 105 | +### Added GraphQL aggregation fields to group |
| 106 | + |
| 107 | +Now you can apply `max`, `min`, `distinct`, `sum`, `group` to grouped nodes. In other words, |
| 108 | +a query like this is now possible: |
| 109 | + |
| 110 | +```graphql |
| 111 | +{ |
| 112 | + allMarkdown { |
| 113 | + group(field: frontmatter___authors___name) { |
| 114 | + fieldValue |
| 115 | + group(field: frontmatter___title) { |
| 116 | + fieldValue |
| 117 | + max(field: frontmatter___price) |
| 118 | + } |
| 119 | + } |
| 120 | + } |
| 121 | +} |
| 122 | +``` |
| 123 | + |
| 124 | +See [PR #32533](https://github.com/gatsbyjs/gatsby/pull/32533) for details. |
| 125 | + |
| 126 | +## Preparations for gatsby v4 |
| 127 | + |
| 128 | +Actions used for schema customization should not be used in `sourceNodes` API anymore: |
| 129 | +namely `createTypes`, `createFieldExtension` and `addThirdPartySchema`. |
| 130 | + |
| 131 | +Usage of those actions in `sourceNodes` is deprecated as of this release and will break in [Gatsby v4](/gatsby-4/). |
| 132 | + |
| 133 | +Also check out the [migration guide](#) (work in progress!) for other upcoming breaking changes and don't hesitate to |
| 134 | +let us know what you think in [GitHub discussion](https://github.com/gatsbyjs/gatsby/discussions/32860). |
| 135 | + |
| 136 | +## `gatsby-source-drupal` improvements |
| 137 | + |
| 138 | +The plugin got a fair share of improvements and bugfixes for warm and incremental builds: |
| 139 | + |
| 140 | +- Fix GraphQL schema errors and crashes when deleting nodes, PRs [#32971](https://github.com/gatsbyjs/gatsby/pull/32971), [#33099](https://github.com/gatsbyjs/gatsby/pull/33099), [#33143](https://github.com/gatsbyjs/gatsby/pull/33143) and [#33181](https://github.com/gatsbyjs/gatsby/pull/33181) |
| 141 | +- Warn on bad webhook format: [PR #33079](https://github.com/gatsbyjs/gatsby/pull/33079) |
| 142 | +- Add tracing for full/delta fetches and http requests: [PR #33142](https://github.com/gatsbyjs/gatsby/pull/33142) |
| 143 | + |
| 144 | +## New home for `gatsby-plugin-netlify` |
| 145 | + |
| 146 | +The plugin is moved to https://github.com/netlify/gatsby-plugin-netlify Go check it out for the latest source code. |
| 147 | + |
| 148 | +## Notable bugfixes & improvements |
| 149 | + |
| 150 | +- `gatsby`: make conditional page builds work with static queries, via [PR #32949](https://github.com/gatsbyjs/gatsby/pull/32949) |
| 151 | +- `gatsby`: reduce page-renderer size, via [PR #33051](https://github.com/gatsbyjs/gatsby/pull/33051/) |
| 152 | +- `gatsby`: fix nesting of tracing spans + add docs for OpenTelemetry, via [PR #33098](https://github.com/gatsbyjs/gatsby/pull/33098) |
| 153 | +- `gatsby`: don't bundle moment locale files, via [PR #33092](https://github.com/gatsbyjs/gatsby/pull/33092) |
| 154 | +- `gatsby`: add environment variable for setting tracing config file, via [PR #32513](https://github.com/gatsbyjs/gatsby/pull/32513) |
| 155 | +- `gatsby`: Assign parentSpan to activities that were missing them, via [PR #33122](https://github.com/gatsbyjs/gatsby/pull/33122) |
| 156 | +- `gatsby-source-contentful`: fix error "Unable to download asset", via [PR #33024](https://github.com/gatsbyjs/gatsby/pull/33024) |
| 157 | +- `gatsby-transformer-sqip`: ensure failed asset downloads do not break build, via [PR #33037](https://github.com/gatsbyjs/gatsby/pull/33037) |
| 158 | +- `gatsby-plugin-google-tagmanager`: ability to serve gtm.js from "self-hosted" tagging server, via [PR #32733](https://github.com/gatsbyjs/gatsby/pull/32733) |
| 159 | +- `gatsby-plugin-styled-components`: Add ability to disable vendor prefixes, via [PR #33147](https://github.com/gatsbyjs/gatsby/pull/33147) |
| 160 | + |
| 161 | +## Contributors |
| 162 | + |
| 163 | +A big **Thank You ** to [our community who contributed ](https://github.com/gatsbyjs/gatsby/compare/[email protected]@3.14.0) to this release 💜 |
| 164 | + |
| 165 | +- [tackaberry](https://github.com/tackaberry): feat(gatsby-plugin-google-tagmanager): add option for se |
| 166 | + lfHostedOrigin [PR #32733](https://github.com/gatsbyjs/gatsby/pull/32733) |
| 167 | +- [herecydev](https://github.com/herecydev) |
| 168 | + |
| 169 | + - fix(gatsby): set staticQueryResultHash to new hash on data change [PR #32949](https://github.com/ga |
| 170 | + tsbyjs/gatsby/pull/32949) |
| 171 | + - feat(gatsby-plugin-styled-components): Add ability to disable vendor prefixes [PR #33147](https://g |
| 172 | + ithub.com/gatsbyjs/gatsby/pull/33147) |
| 173 | + |
| 174 | +- [ascorbic](https://github.com/ascorbic): chore: add missing `@babel/runtime` dependencies [PR #32954] |
| 175 | + (https://github.com/gatsbyjs/gatsby/pull/32954) |
| 176 | +- [axe312ger](https://github.com/axe312ger) |
| 177 | + |
| 178 | + - fix(contentful): asset download retry [PR #33024](https://github.com/gatsbyjs/gatsby/pull/33024) |
| 179 | + - test(CTF): ensure changing base64 previews don't break rich text tests [PR #33027](https://github.c |
| 180 | + om/gatsbyjs/gatsby/pull/33027) |
| 181 | + - fix(sqip): ensure failed asset downloads do not break build [PR #33037](https://github.com/gatsbyjs |
| 182 | + /gatsby/pull/33037) |
| 183 | + |
| 184 | +- [Himadu2000](https://github.com/Himadu2000): fix(starters): Formats for StaticImage [PR #33057](https |
| 185 | + ://github.com/gatsbyjs/gatsby/pull/33057) |
| 186 | +- [merceyz](https://github.com/merceyz): fix: add missing dependencies [PR #31837](https://github.com/g |
| 187 | + atsbyjs/gatsby/pull/31837) |
| 188 | +- [actuallyatiger](https://github.com/actuallyatiger): chore(docs): Update GitHub Pages doc [PR #29031] |
| 189 | + (https://github.com/gatsbyjs/gatsby/pull/29031) |
| 190 | +- [acbramley](https://github.com/acbramley): Document filtering temporary files [PR #32048](https://git |
| 191 | + hub.com/gatsbyjs/gatsby/pull/32048) |
| 192 | +- [jabrks](https://github.com/jabrks): fix(gatsby): Don't bundle moment locale files [PR #33092](https: |
| 193 | + //github.com/gatsbyjs/gatsby/pull/33092) |
| 194 | +- [nagiek](https://github.com/nagiek): feat(gatsby): Add aggregation resolvers to group [PR #32533](htt |
| 195 | + ps://github.com/gatsbyjs/gatsby/pull/32533) |
| 196 | +- [aleksanderantropov](https://github.com/aleksanderantropov) |
| 197 | + |
| 198 | + - chore(docs): Correct gatsby-cloud plugin in tutorial part 3 [PR #33118](https://github.com/gatsbyjs |
| 199 | + /gatsby/pull/33118) |
| 200 | + - docs: fix typo [PR #33137](https://github.com/gatsbyjs/gatsby/pull/33137) |
| 201 | + |
| 202 | +- [bartveneman](https://github.com/bartveneman): docs(gatsby-plugin-gatsby-cloud): fix typo: asterix -> |
| 203 | + asterisk [PR #33135](https://github.com/gatsbyjs/gatsby/pull/33135) |
| 204 | +- [rudouglas](https://github.com/rudouglas): chore(gatsby): add environment variable for setting tracin |
| 205 | + g config file [PR #32513](https://github.com/gatsbyjs/gatsby/pull/32513) |
| 206 | +- [minimalsm](https://github.com/minimalsm): docs: Fix broken link on Getting Started with MDX page [PR #33148](https://github.com/gatsbyjs/gatsby/pull/33148) |
0 commit comments