Как обновить зависимости Gatsby при обновлении на новую версию

image

Согласно официальной документации, существует возможность обновить как версию Node, так и Gatsby, не внося изменений в код (при условии, что на код не влияют изменения, которые могут привести к конфликтам). Другой совет, который можно найти в интернете, похож. К сожалению, при работе над проектом средней сложности обновление до новой мажорной версии, скорее всего, приведет к между версиями и зависимостями.

Вот неисчерпывающий список проблем, с которыми можно столкнуться. Например, застрять в "аде зависимостей", где npm install столкнется с конфликтом версий зависимостей, а любая попытка разрешения их путем обновления или понижения версии пакетов просто переносит конфликт на другой набор зависимостей. Простое выполнение gatsby develop зависает в бесконечном цикле из-за ошибки в каком-нибудь плагине, которая возникает только в определенных версиях Node. Плагин может быть не обновлен до нужной версии, и придется либо удалить плагин, либо проводить глубокий рефакторинг, чтобы исключить ошибку.

Как обновить

Следующие инструкции написаны для npm, но они также актуальны, и для Yarn.

Общие советы:

  • Чтобы избежать "ада зависимостей", следует обновлять все одновременно, а не обновлять что-то одно за другим.
  • Непонятные ошибки часто устраняются путем удаления .cache, node_modules и package-lock.json перед запуском npm install.
  • Не останавливайтесь на том этапе, когда сборка успешно завершается и автоматические тесты проходят успешно. Вероятно, придется провести ручное тестирование, чтобы выявить все тонкие проблемы.

Пошаговые инструкции:

  1. Переключиться на нужную версию node.
  2. Убедитесь, что нужная версия gatsby-cli установлена ​​в этой конкретной среде Node (например, npm install -g gatsby-cli@latest).
  3. Запустить ncu -u, чтобы обновить зависимости package.json до новейших версий (требуется npm-check-updates).
  4. Вручную отредактируйте package.json, чтобы понизить версию пакетов, которые необходимо понизить для совместимости. Например, на момент написания этой статьи мне пришлосьсуществует вероятность необходимости понизить версию React, чтобы избежать ошибок, если Gatsby не полностью поддерживает последнюю версию Node).
  5. Удалить .cache.
  6. Удалить node_modules.
  7. Удалить package-lock.json.
  8. Запускайте npm install, пока он не заработает без ошибок. Можно ожидать появления множества ошибок, связанных с конфликтами версий в зависимостях. Распространенным источником проблем являются неподдерживаемые плагины, созданные сообществом. В некоторых случаях конфликты можно разрешить, понизив версию некоторых зависимостей, которые только что обновили. В других случаях можно удалить или заменить несовместимые плагины. В крайнем случае можно попробовать npm install --legacy-peer-deps и принудительно выполнить установку, несмотря на конфликты версий. Неподдерживаемые плагины на практике часто работают с новыми зависимостями.
  9. Запускайте gatsby develop, пока он не заработает без ошибок. Устранение ошибок на этом этапе часто требует изменения зависимостей, и в этом случае перейдите к шагу 5.
  10. Как только ваша среда разработки полностью заработает, пришло время вручную протестировать производственную сборку (gatsby build && gatsby serve). Например, некоторые проблемы с маршрутизацией существуют только в рабочей сборке.

Если после выполнения всех пунктов у вас еще остались силы, можете продолжить работу, несмотря на многочисленные предупреждения npm и предупреждения Gatsby, появившиеся в результате обновлений.